最近升级了androidstudio到2.1.1之后,发现生成的apk在某些手机上运行不了,报的都是找不到对应so文件,可我仔细查看了下的确是生成了so文件,怎么会找不到呢。
在网上搜索,有人说是把targetSdkVersion降低到22或以下,试了没成功,有人说再增加个armeabi-v7a的目录,放入相同的so,这个试了之后发现的确某些手机能运行成功了,但有的手机还是不行,而且这样大大增加了apk包的大小。
一开始以为是不同android版本的问题,后来解压apk后发现lib下多了许多目录,像arm64-v8a,mips,x86等等,几乎包含了所有的架构,但实际只有armeabi里有对应的so包,其他的都没有,心想是不是跟手机的处理器有关,不同的处理器会查找不同的目录找到so,当找不到自然就报错了。
然后我就查了手机的cpu,发现64位的由于arm64-v8a下没有so,所以报错,而32位的由于armeabi下有对应的so,所以运行成功。
再参考了这篇文章,http://www.cnblogs.com/poe-blog/p/4728970.html。终于找到解决方案了:
android { // rest of your app's logic splits { abi { enable true reset() include 'x86', 'x86_64', 'armeabi-v7a', 'armeabi' universalApk false } } }
可以将不需要的去掉,比如我就删掉红色的了。