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,结果如下:
第三: 友情来接 其它一些常见问题