Android 中个别机型运行完崩溃出现UnsatisfiedLinkError 错误的原因及解决方案

首先来看看error的logcat是什么样的?如下图:


我最近还是第一次遇见过这种问题,看了错误源大概是第三方包文件库找不到方法的情况,然后就以为是编译出了错,将原来的包删除,在重新将jar包导入项目中,最终的结果还是不行。

后来我发现不是每个运行这个apk的手机都会报错,而是在某些机型上安装完成之后运行即崩溃。于是从另外的方面考虑:

首先怀疑是在 apk 中相应的 libs\abi 目录下没有放置 libmobsec.so,然而检查发现这个 so 在所有的 libs\abi 下都有放置过,继续排查;

然后的想法是放置的 so 不是对应 abi 的,比如由于粗心在 armeabi 目录下放置了 x86 指令集的 so,导致在 armeabi 指令集手机上加载出错,这个也被排除掉;


在安装 app 时,Android package manager 代码需要分析当前手机支持的指令集并拷贝相关指令集的 so。从 Android2.X 到 Android6.0 系统,由于相继加入了 x86、64位等指令集的支持,这一部分代码处理逻辑有不少变动,然而这个代码是存在逻辑缺陷的,存在遗漏拷贝的可能,导致在一些机型上并不一定保证所有的 so 都能被正确抽取到 /data/app-lib/<package name> 目录下,从而导致应用在加载 so 的时候出现 UnsatisfiedLinkError 这样的错误。


于是我发现在我的libs中有这些文件夹,而且每个文件夹都都有jar包,根据上面分析的情况,于是我将关于x86、64位的文件都删除,只留下最基本的就可以了。

希望对你们有所帮助!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值