android通过Jni加载so库遇到UnsatisfiedLinkError问题!!!

来源:互联网 发布:天天生鲜项目源码 编辑:程序博客网 时间:2024/05/18 01:18

终于解决了困扰我半个世纪的难题,记录下:

我的项目中使用了别人的so类,已经打包好了,且只有armeabi这一种。按说应该是兼容性最好的了,但是问题偏偏出现了!!!

一旦加载so时就会报错java.lang.UnsatisfiedLinkError ,各种千百度和google只有和我类似,从没有和我一样的情况。从出现这个问题 到现在解决 中间省略可以绕地球一圈的文字。。。

so库交叉编译时 可选arm,x86,mips三种架构,者三种结构还有32位于64位之分。 

百度得知其中有个坑:  

如果你的项目中有arm64-v8a,当你的app在64位arm架构的cpu手机上运行时,只会从arm64-v8a找so库,找不到就报错,不会再去armeabi-v7a和armeabi里去再找。 

如果没有arm64-v8a文件夹的话,会从armeabi-v7a找,找不到就去armeabi找。都找不到才报错。

但是!!!经过N次报错后,,,

我发现手机只会根据cpu找对应文件夹下的so加载,没有就特么的直接报错,根本不会重新去别的文件夹下找!!!!(我怀疑可能eclipse和android studio编译的原因,或者新版安卓系统加载so库的策略改变了)

最后我的解决办法是:新建armeabi,armeabi-v7a,arm64-v8a,arm-v8a,然后在四个文件夹内 分别拷贝一份so库放入。

1 0
原创粉丝点击