so包问题汇总 PathClassLoader ** couldn't find; dlopen failed is 32-bit

问题1 厂家提供的so包类型不全,一般是如下三种

如下

若还需要使用 arm64-v8a ,可以新建 arm64-v8a 文件夹,然后拷贝 armeabi so包到里面
如下


问题2 找不到 so 包

java.lang.UnsatisfiedLinkErrorr:dalvik.system.PathClassLoader[DexPathList[[zipfile “/data/app/com.nf.health-1/base.apk”],nativeLibraryDirectories[/data/app/com.nf.health-1/lib/arm64, /data/app/com.nf.health-1/base.apk!/lib/arm64-v8a, /vendor/lib64, /system/lib64]]] couldn’t find “libdewlt2-jni.so”

1 查看对应 libs 文件夹是否存在,若存在检测里面的 so 包是否存在
2 在 app 的 build 文件中加入如下代码
sourceSets {
        main {
            jniLibs.srcDirs = ['libs'] //指定so文件的位置
        }
 }
3 去掉 app 的 build 文件中过多的 so 包类型
 defaultConfig {
        ndk {
            // 设置支持的SO库架构,没有的不要设置
            abiFilters 'armeabi' //, 'x86', 'armeabi-v7a', 'x86_64', 'arm64-v8a'
        }
    }

问题3 能加载 so 包 但是调用方法时崩溃

某一种崩溃日志如下

UnsatisfiedLinkErrorr: dlopen failed "/data/ **.so" is 32-bit instead of 64-bit
原因是设置了 so 架构支持 64 机(正好你的机器cpu是64位),但是对应 so 包是从 armeabi 拷贝的, native 方法其实是不支持的,解决办法: 问题2的第三步,去掉’arm64-v8a’即可
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值