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"

报错关键信息已在截图中圈出
在这里插入图片描述

2、问题分析与定位

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

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

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

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

在这里插入图片描述
居然新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文件目录
6)解决办法

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

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值