Android 6.0,64bit ARM架构 环境下so文件加载失败问题

so文件出现加载失败时会有crash产生,异常一般为Unsatisfiedlinkerror,首先根据判断后的具体描述获取更进一步的信息:

1.有No implementation found for xxx,这类问题有可能是因为so文件中的native类和包名与当前项目中引入的类和包名不一致导致。比如包名为com.xxx 类名为nativeClass,而so文件中定义nativeClass为java_com_xxx_xx_nativeClass,其中java_com_xxx_xx为包名,nativeClass为类名,此时两者包名不一致,会出现crash。


2.另一种原因是so文件的摆放问题,比如项目下有armeabi、armeabi-v7a、arm64-v8a三个文件夹,这三个文件夹中的so文件必须一致,意思是armeabi中有的so文件,armeabi-v7a和arm64-v8a文件夹中都必须有,而且是不同abi编译的so文件,若有不一样,则会出现crash现象。这是因为只要有arm64-v8a文件夹,系统会直接去此文件夹中寻找对应的so文件,而如果有的so文件没有64bit的话,就会出现异常抛出。


3.我这次遇到的情况比较特殊,开发环境是RK3399, 64bit arm架构,android 6.0系统。将armeabi和armeabi-v7a文件夹放置在main文件夹下的jniLibs文件夹下时,会出现so文件加载失败的情况,而且也设置了nbk { abiFilter { "armeabi" , "armeabi-v7a"} },并没有用处,后来将armeabi 和 armeabi-v7a文件夹放在app/libs下后,问题解决。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值