NDK常见错误
1、Android.mk文件不存在将Android.mk重命名为Android.mk.m,然后cygwin中:
$ ndk-build 出错 Android NDK: Your APP_BUILD_SCRIPT points to an unknown file: /cygdrive/f/02_Android/android4_0_project/Ndkhelloworld/jni/Android.mk
/cygdrive/c/android-ndk-r9b/build/core/add-application.mk:171: *** Android NDK: Aborting... 。 停止。 |
2、Android.mk文件 的配置信息有错误 把LOCAL_MODULE:=libHello这行给删除 $ ndk-build 出错 /cygdrive/c/android-ndk-r9b/build/core/build-shared-library.mk:23: *** Android N DK: Missing LOCAL_MODULE before including BUILD_SHARED_LIBRARY in /cygdrive/f/02 _Android/android4_0_project/Ndkhelloworld/jni/Android.mk 。 停止。 |
3、c代码 语法出现错误,编译不通过 $ ndk-build 出错 解决:C语言错误往往是一个错误,报出多个错误,这时,只要修正第一个错误。 [armeabi] Compile thumb : Hello <= Hello.c
F:/02_Android/android4_0_project/Ndkhelloworld/jni/Hello.c: In function 'Java_cn_zengfansheng_ndkhelloworld_DemoActivity_helloFromJNI':
F:/02_Android/android4_0_project/Ndkhelloworld/jni/Hello.c:7:2: error: unknown type name 'haha'
/cygdrive/c/android-ndk-r9b/build/core/build-binary.mk:384: recipe for target `/cygdrive/f/02_Android/android4_0_project/Ndkhelloworld/obj/local/armeabi/objs/Hello/Hello.o' failed
make: *** [/cygdrive/f/02_Android/android4_0_project/Ndkhelloworld/obj/local/armeabi/objs/Hello/Hello.o] Error 1 |
4、java层C语言代码库没有找到,静态加载代码库的时候 代码库没有找到. 将加载类库的static代码给写错了 static {
// libHello.so。注意,和LOCAL_MODULE :=Hello一致。不要写lib前缀和.so后缀
System.loadLibrary("Hell0");//实际为Hello,不是0
}cygwin中$ ndk-build不会出错 11-28 02:05:49.531: E/AndroidRuntime(805): Caused by: java.lang.UnsatisfiedLinkError: Couldn't load Hell0: findLibrary returned null 但部署到手机上出错 |
5、C语言代码函数签名出现错误 实际的java代码的native声明: public native String helloFromJNI(); 而将C语言中的方法签名写错了: jstring Java_cn_zengfansheng_ndkhelloworld_DemoActivity_helloFromJNI111111(
JNIEnv * env, jobject obj) {
return (*(*env)).NewStringUTF(env, "hello from c javah");
}$ ndk-build 不会出错, 部署到手机上,不运行也不错误, 但执行后就出错 11-28 02:05:49.531: E/AndroidRuntime(805): Caused by: java.lang.UnsatisfiedLinkError: Couldn't load Hell0: findLibrary returned null(链接出错) 11-28 02:12:15.222: E/AndroidRuntime(933): Caused by: java.lang.UnsatisfiedLinkError: Native method not found: cn.zengfansheng.ndkhelloworld.DemoActivity.helloFromJNI:()Ljava/lang/String; 解决:去C代码中找,是Java没写,包名,类名,方法名,等有没有写对,是下划线连接,不是点 Java_cn_zengfansheng_ndkhelloworld_DemoActivity_helloFromJNI(
JNIEnv * env, jobject obj) {} |
6、逻辑性的错误, 使用了已经回收的内存空间, 访问了不可以被访问的内存空间,修改了不能被修改的内存空间 解决: 断点. ndk-gdb 使用C:\android-ndk-r9b\ndk-gdb,但不够成熟 通过log 方式来观察程序执行流程 |