Android 在不同架构中用到.so加载失败的问题研究与解决办法

在Android开发中难免会用到.so库,但是使用过程中总是会碰到各式各样的问题,

下面就对出现的问题进行总结一下。

 1、确实是.so库的原因造成加载失败,不能识别

原因:.so库有问题; 

解决办法:重新编译.so库。

 2、 出现在某一个架构下找不到对应的.so库,比如:"lib/arm64, /vendor/lib64, /system/lib64]]] couldn't find "libxxx.so"

  原因:arm64-v8a架构下没有对应的64位.so库,一般来说64位是向下兼容的,那为什么还是会出现这样的问题呢?原因是如果App自己存在arm64-v8a就不会向下去找对应的.so库了。

 解决办法:如果存在arm64-v8a文件夹就可以考虑编译一个对应架构的.so库,如果没有,可以将arm64-v8a文件夹删除,集体向下兼容32位架构,这样就能避免出现找不到.so库的错误。

 3、在子线程加载.so库,因为.so库加载的时候需要进行线程绑定,而且仅有一次,如果在子线程加载过一次,在该子线程结束之后,该.so库就无法再次被加载,所以一般建议在主线程中加载.so库。

 4、加载成功,但是调用失败

 原因:本地native方法JNI编写错误或是.so里面的接口本身有问题

 解决办法:log日志调试。

你可能感兴趣的:(JNI技术,Android,Android应用)