armeabi-v7a和armeabi遇到的Crash(java.lang.UnsatisfiedLinkError)

1、问题描述

引用第三方提供的aar包之后,原有项目的个别功能(需用到.so的功能)出现crash。
报错如下

 java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file 
 "/data/app/com.xxx.xxxx-SPFO-zMOc2X4M6nYjKkt6A==/base.apk"],nativeLibraryDirectories=
 [/data/app/com.xxx.xxxx-SPFO-zMOc2X4M6nYjKkt6A==/lib/arm, /system/fake-libs, /data/app/com.xxx.xxxx-SPFO-
 zMOc2X4M6nYjKkt6A==/base.apk!/lib/armeabi-v7a, /system/lib, /vendor/lib]]]
 couldn't find "libKDDes.so"

报错关键信息已在截图中圈出
armeabi-v7a和armeabi遇到的Crash(java.lang.UnsatisfiedLinkError)_第1张图片

2、问题分析与定位

从日志中可以看出,找不到xxx.so文件。而项目中.so文件的build.gradle文件配置路径都是正确的,那么继续下面的步骤

1)、先去看下安装包中是否有该so文件

解压.apk文件 lib目录下,存在该.so

2)、因为是集成第三方aar后才出现crash,况且第三方aar与出问题的功能并无关联。于是把集成前的apk和集成aar后的apk进行了对比

armeabi-v7a和armeabi遇到的Crash(java.lang.UnsatisfiedLinkError)_第2张图片
居然新apk包多了armeabi-v7a文件,难道是armeabi-v7a文件的锅?继续往下走

3)armeabi-v7a到底是什么?

https://blog.csdn.net/ecjtuhq/article/details/79440986
https://www.aliyun.com/jiaocheng/76119.html
从上述两篇文章中得知armeabi-v7a是不会向下兼容的,也就是说当前主流的手机会默认去armeabi-v7a下查找so文件,如果找不到不会继续去armeabi目录下寻找。
从上面截图中可以发现armeabi-v7a中并没有libKDDes.so文件,因此会crash,报错找不到该so文件,那么armeabi-v7a是从哪里产生的呢?为什么旧apk中只有armeabi?继续探索

4)到自己的项目中去查看.so的目录。

项目中.so存在在libs/armeabi/下,并没有armeabi-v7a目录,由此怀疑是第三方aar包中含有armeabi-v7a目录

5)找到第三方aar,用好压打开,jni目录下找到了armeabi-v7a文件目录armeabi-v7a和armeabi遇到的Crash(java.lang.UnsatisfiedLinkError)_第3张图片

6)解决办法

由于我这边的aar是第三方友商定制提供的,故联系了相关开发人员 把aar中armeabi-v7a改为armeabi,到此问题顺利解决

你可能感兴趣的:(Android)