您的位置:首页 > 其它

随笔记录使用DNK时遇到的几个问题

2015-03-06 15:01 281 查看
ndk教程点击打开链接

第一个问题:没有找到jni下的Android.mk文件,console下提示如下

Android NDK: WARNING: APP_PLATFORM android-19 is larger than android:minSdkVersion 11 in ./AndroidManifest.xml <Ps:此处警告可以无视>   

Android NDK: Your APP_BUILD_SCRIPT points to an unknown file: ./jni/Android.mk 

E:/job/ndk/android-ndk-r10/build/core/add-application.mk:209: *** Android NDK: Aborting...    .  Stop.

错误的原因是,我将 jni 文件加名称写成 jnk 了,相当无语,尽然纠结了很久才发现



修正之后,console下的输出为:
Android NDK: WARNING: APP_PLATFORM android-19 is larger than android:minSdkVersion 11 in ./AndroidManifest.xml    

[armeabi] Compile thumb  : hello-jni <= hello-jni.c

[armeabi] SharedLibrary  : libhello-jni.so

[armeabi] Install        : libhello-jni.so => libs/armeabi/libhello-jni.so

此时项目下会多出来一些文件加及文件,截图如下



第二个问题:C文件中的函数命名错误,错误日志如下:

03-06 14:18:04.868: E/AndroidRuntime(18613): FATAL EXCEPTION: main

03-06 14:18:04.868: E/AndroidRuntime(18613): java.lang.UnsatisfiedLinkError: Native method not found: com.ex.testndk.HelloJni.stringFromJNI:()Ljava/lang/String;

03-06 14:18:04.868: E/AndroidRuntime(18613): at com.ex.testndk.HelloJni.stringFromJNI(Native Method)

03-06 14:18:04.868: E/AndroidRuntime(18613): at com.ex.testndk.HelloJni.onCreate(HelloJni.java:36)

03-06 14:18:04.868: E/AndroidRuntime(18613): at android.app.Activity.performCreate(Activity.java:5109)

03-06 14:18:04.868: E/AndroidRuntime(18613): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)

03-06 14:18:04.868: E/AndroidRuntime(18613): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2161)

03-06 14:18:04.868: E/AndroidRuntime(18613): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2247)

03-06 14:18:04.868: E/AndroidRuntime(18613): at android.app.ActivityThread.access$600(ActivityThread.java:148)

03-06 14:18:04.868: E/AndroidRuntime(18613): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1241)

03-06 14:18:04.868: E/AndroidRuntime(18613): at android.os.Handler.dispatchMessage(Handler.java:99)

03-06 14:18:04.868: E/AndroidRuntime(18613): at android.os.Looper.loop(Looper.java:137)

03-06 14:18:04.868: E/AndroidRuntime(18613): at android.app.ActivityThread.main(ActivityThread.java:5138)

03-06 14:18:04.868: E/AndroidRuntime(18613): at java.lang.reflect.Method.invokeNative(Native Method)

03-06 14:18:04.868: E/AndroidRuntime(18613): at java.lang.reflect.Method.invoke(Method.java:511)

03-06 14:18:04.868: E/AndroidRuntime(18613): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)

03-06 14:18:04.868: E/AndroidRuntime(18613): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)

03-06 14:18:04.868: E/AndroidRuntime(18613): at dalvik.system.NativeStart.main(Native Method)
问题截图



此处的命名应该是对应java源码文件目录的(com.ex.testndk),正确写法是:Java_com_ex_testndk_HelloJni_stringFromJNI( JNIEnv* env,  jobject thiz )【此处开头的Java必须要是大写】,一下为正确截图:



好了,这样就OK了,对项目Run As,结果如下:



第三:  友情来接  其它一些常见问题
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: