1:JNI开发的常见错误
1. 写错了load的library
java.lang.UnsatisfiedLinkError: Couldn't load hell0: findLibrary returned null
2. Android.mk文件编写错误
/jni/Android.mk:4: *** missing separator. Stop.
3. LOCAL_MODULE配置不能有扩展名
//jni/Android.mk:hello.so: LOCAL_MODULE_FILENAME must not contain a file extension
4. c或者c++的源文件名称配置错误
objs/hello/helo.o'. Stop.
5. 如果使用了错误的cpu平台
java.lang.UnsatisfiedLinkError: Couldn't load hello: findLibrary returned null
添加多cpu平台的支持 APP_ABI := armeabi armeabi-v7a x86
6. c语言方法名称错误,导致java代码无法寻找到c代码
Caused by: java.lang.UnsatisfiedLinkError: Native method not found: com.itheima.hellojni.MainActivity.helloFromC:()Ljava/lang/String;
7. 应用程序闪退
06-25 07:31:46.698: I/dalvikvm(1871): #00 pc 0008ee6d /system/lib/libdvm.so
06-25 07:31:46.698: I/dalvikvm(1871): #01 pc 000738ca /system/lib/libdvm.so
06-25 07:31:46.698: I/dalvikvm(1871): #02 pc 000739f4 /system/lib/libdvm.so
06-25 07:31:46.698: I/dalvikvm(1871): #03 pc 00038f5b /system/lib/libdvm.so
06-25 07:31:46.698: I/dalvikvm(1871): #04 pc 0003bdbd /system/lib/libdvm.so
要么就是c代码有逻辑错误
要么编码问题,中文或者空格路径
2:JNI自动生成头文件
使用javah命令
3:c语言里面打印log的用法怎么做
宏定义
Android.mk中可以添加一段文字 LOCAL_LDLIBS+=-llog,引入一个.so的动态库文件
4:C代码调用java代码的步骤
a) 找到java里面的一个Class。(必须使用全路径,使用”/”)
b) 找到Class里面的一个方法
c) 调用clazz里面的那个方法
5:c代码和cpp代码的区别
1、 C和C++的主要区别在于,C++引入了面向对象的一些新特性,因此在编译的时候,会生成中间代码,并引入静态的函数库然后再编译.so文件.
2、 如果是C++代码,一定要引入生成的头文件,否则运行的时候,会报错