当前位置:   article > 正文

java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader错误记录_w/system.err: java.lang.unsatisfiedlinkerror: dalv

w/system.err: java.lang.unsatisfiedlinkerror: dalvik.system.pathclassloader[

错误分析:

        加载.so包报错,在这个错误后面一般还会跟一串路径,在这个路径下面没有找到当前需要的.so包.一般是程序在运行过程中调用System.loadLibrary(“xxxxxxxx”)的时候报错的.

解决思路:

        检查自己是不是把libxxxxxx.so文件放在正确的位置,然后重新打包。

        so包放的位置分为两种,一种是放在libs文件夹下面(一般是兼容以前的Eclipse的工程),一种是放在jniLibs文件夹下(现在用AndroidStudio新建的工程一般都是这种).

        放在libs文件夹的要在在model下的build.gradle中的android内添加以下代码:

  1. sourceSets {
  2. main {
  3. jniLibs.srcDirs = ['libs']
  4. }
  5. }

        放在jniLibs文件夹的不需要以上操作,但是一定要注意文件的位置有没有放对地方,jniLibs文件夹要新建在工程main目录下,其他地方就要上述操作指定位置了.

        上述操作完后还是继续报错.查看NDK是不是排除了你的设备架构,看你的代码里是否添加了如下代码:

  1. android {
  2. defaultConfig {
  3. ........//此处省略其他设置
  4. ndk {
  5. abiFilters "armeabi"
  6. }
  7. }
  8. }

        这个设置就是只加载armabi架构(目录下)的so库,如果是别的架构,就会找不到。

解决:
        可以添加自己需要的架构,这样做的好处是apk体积可以变小代码.

放置 .so 文件的正确姿势:
        • 为了减小 apk 体积,只保留 armeabi 和 armeabi-v7a 两个文件夹,并保证这两个文件夹中 .so 数量一致
        • 对只提供 armeabi 版本的第三方 .so,原样复制一份到 armeabi-v7a 文件夹
存放so的规则:
        你应该尽可能的提供专为每个ABI优化过的.so文件,但要么全部支持,要么都不支持:你不应该混合着使用。你应该为每个ABI目录提供对应的.so文件。

        除了上述原因外还有可能是so库对应的架构不正确,这个就得找so库提供者了.

额外记录下加载so库的方法:

1.System.load(): 参数为库文件的绝对路径,可以是任意路径。

2.System.loadLibrary():参数为库文件名,不包含库文件的扩展名。在使用时去掉名字前面的lib和后面的.so

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

闽ICP备14008679号