1. ndk Unresolved inclusion: <jni.h>或者Type 'jint' could not be resolved
选中工程,右键->Properties,点击C/C++ General展开,点击 Path and Symbols,在右边Includes下,点击Add,把NDK文件夹下的jni头文件和相应的C++头文件添加进来。一定要填写完整的路径,比如我添加的两个路径分别是:
E:\AndroidNDK\android-ndk-r10c\toolchains\mipsel-linux-android-4.8\prebuilt\windows-x86_64\lib\gcc\mipsel-linux-android\4.8\include
E:\AndroidNDK\android-ndk-r10c\platforms\android-19\arch-arm\usr\include
点击ok,解决
2.make: *** No rule to make target `c:/user/android/jni/hello.c', neede
d by`c:/user/android/obj/local/armeabi/hello/hello.o'. Stop.
错误原因:工程目录改变或者修改了文件名,类名,导致重新编译的时候文件找不到
解决方法:找到相应的工程目录下,删除obj文件夹,然后重新编译。
3.ndk-build 编译多个CPU架构的动态链接库
如果有或创建Application.mk文件,则在该文件添加如下内容:
APP_ABI := armeabi armeabi-v7a x86
如果没有或不想使用Application.mk文件,则在ndk-build参数中添加
APP_ABI="armeabi armeabi-v7a x86 mips"
然后直接运行:
ndk-build APP_ABI="armeabi armeabi-v7a x86 mips"
这个是生成所有的库,如果你单纯的只需要某一个,例如x86,可以直接执行ndk-build APP_ABI="x86"即可
4. java.lang.UnsatisfiedLinkError: Native method not found
错误1:方法写的有错误,Java_com_example_helloword2_MainActivity_add严格按照所要求的检查是否方法或参数有错误
或者大小写有误或者Java中没有写加载类的方法System.loadLibrary("hello");
错误2:添加extern "C" {方法体}
错误3:生成的so库不对应,比如你的机器cpu是armeabi-v7a,你生成的是armeabi,所以出错,解决办法,见上面第3条.
5. java.lang.UnsatisfiedLinkError: couldn't load hello:**findLibrary returned null **
错误1:生成的so库不对应,比如你的机器cpu是armeabi-v7a,你生成的是armeabi,所以出错,解决办法,见上面第3条.
错误2:System.loadLibrary("hello"); hello写错,库名写的不对
6.生成本地方法cd到src目录下,执行命令javah -jni com.example.aa.MainActivity(主类名)
7.编译生成so库,cd到项目目录下,ndk-build,如果ndk环境变量没有配置成功,可直接输入你下载的ndk全路径,如android-ndk-r9d/ndk-build
8.*** multiple target patterns. Stop
解决:将obj/目录删除,再重新编译即可