首先来看看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位的文件都删除,只留下最基本的就可以了。
希望对你们有所帮助!