开发android jni 遇到的问题
开发android jni的背景知识,网的资料很多,在此给出自己找的几个比较好的文章与示例。
1、Android JNI(一)——NDK与JNI基础
JNI 静态注册与动态注册
Android JNI
2、 android jni 分为静态加载和动态加载
示例地址
JNIDemo
问题:
- 静态加载失败,原因是包的名称错误。
- 在jni中调用静态类加载动态库的方法将函数指针保存到map中,在new 一个类,调用静态类获取函数指针失败。
解决方法:多线程调用,懒汉模式是非线程安全的,改成饿汗模式。 - 文件权限问题,之前不了解程序的需要写的权限,比较二的问题。
- jin成功运行,但是在JNI的库中,加载动态库时,调用dlsym()函数时,在dlerror()函数检查时,产生一条错误error:undefined symbol: JNI_OnLoad
lib1~libs3 时采用dlopen加载的。
在单独进程里运行,dlopen运行是好的。只是在jni里调用有这么一条错误,怀疑与android有关。
(注)只有第一次调用失败,以后都是正常的。
在网上找到了相似的问题,但没有完美的解决方法。
解决方法:
使用dlerror检查错误,应该清除之前的错误,
while(dlerror());
NOTES
The message returned by dlerror() may reside in a statically allocated buffer that is overwritten by subsequent dlerror() calls.
出处