总结一下开发android jni 遇到的坑

开发android jni 遇到的问题

开发android jni的背景知识,网的资料很多,在此给出自己找的几个比较好的文章与示例。
1、Android JNI(一)——NDK与JNI基础
JNI 静态注册与动态注册
Android JNI
2、 android jni 分为静态加载和动态加载
示例地址
JNIDemo
问题:

  1. 静态加载失败,原因是包的名称错误。
  2. 在jni中调用静态类加载动态库的方法将函数指针保存到map中,在new 一个类,调用静态类获取函数指针失败。
    在这里插入图片描述
    解决方法:多线程调用,懒汉模式是非线程安全的,改成饿汗模式。
  3. 文件权限问题,之前不了解程序的需要写的权限,比较二的问题。
  4. 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.
    出处
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值