今天测试人员给出了一个bug:华为 Mate 8手机Android 6.0系统运行时,出现闪退的bug!开始以为是系统版本引起的问题,经测试小米4的Android 6.0系统不会复现该bug。经过一番排查,发现是arm64-v8a文件夹缺失对应的so库文件引起的BUG。现在许多三方的SDK都会提供编译好的so库文件,但是由于一些原因,有些SDK并没有提供对应标题所有目录的so库文件,而有的却提供的全面,比如百度的SDK就提供有标题列出的所有目录对应的so库文件。
如果你有两个文件夹armeabi和arm64-v8a,在armeabi里面有a.so 和 b.so,而在arm64-v8a里面只有a.so,那么arm64-v8a的手机在用到b的时候就会因为找不到b而报错了。由于arm64-v8a是向下兼容的,所以只需要删掉arm64-v8a文件夹,让手机自适应去查找armeabi的so库即可。但是这样并不能完全的做到完美的兼容,因此在使用JNI库的时候最好是拿到对应文件夹的so库文件。
之前在网上查找解决方法:将arm64中将arm64-v8a缺失的so拷贝至arm64-v8a中。经测试,该解决方法只适用某些so文件,并不能解决该问题,所以请猿类在解决的时候做好验证!!!
参考及姿势补给:
链接:http://www.zhihu.com/question/36893314/answer/78467097
链接:http://www.jianshu.com/p/cb05698a1968
链接:http://www.voidcn.com/blog/u013278099/article/p-4944290.html