当前位置:   article > 正文

如何解决 java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader

java.lang.unsatisfiedlinkerror: dalvik.system.pathclassloader[dexpathlist[[z

问题描述:
在 ndk 项目中,运行时出现 crash,报错信息为:
java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file “/data/app/com.example.app1-N8QaCmB1BIy_61rNltnmmQ==/base.apk”],nativeLibraryDirectories=[/data/app/com.example.app1-N8QaCmB1BIy_61rNltnmmQ==/lib/arm64, /data/app/com.example.app1-N8QaCmB1BIy_61rNltnmmQ==/base.apk!/lib/arm64-v8a, /system/lib64, /hw_product/lib64, /system/product/lib64]]] couldn’t find “libexample.so”

问题分析:
当报错信息为:java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file ]]] couldn’t find “xxx.so"时,是因为so文件加载异常。根据日志的描述:设备的 cpu 架构是 arm64-v8a,但是在/lib/arm64-v8a路径下没有找到"xxxxx.so”,所以运行时闪退了。项目中jni目录下只有 armeabi-v7a 的so文件,但是64位的设备应该是兼容32位的库的呀?
这是因为 arm64-v8a 的手机在用到该app的时候会优先查找 arm64 的文件夹,发现里面没有 libexample.so,就报错了,所以在编译的时候应该设置只兼容 armeabi-v7a 架构,这样在运行的时候,就会直接去加载 armeabi-v7a 的so库了。

解决方案:
在 Module 的 build.gradle 文件中添加如下代码:

android {
    defaultConfig {
        // 指定兼容的cpu架构
        ndk {
            abiFilters "armeabi-v7a"
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

Android 开发者官网说明:为特定 ABI 生成代码

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/143241
推荐阅读
相关标签
  

闽ICP备14008679号