首先来看看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 这样的错误。
希望对你们有所帮助!
本文探讨了一种在特定手机型号上出现的应用崩溃问题,主要表现为UnsatisfiedLinkError错误。通过对不同ABI指令集下的.so文件进行排查,最终发现是由于Android packagemanager在拷贝so文件时存在逻辑缺陷导致的问题。
1302

被折叠的 条评论
为什么被折叠?



