当同时导入多个第三方jar时引起的so库冲突或者找不到库UnsatisfiedLinkError的解决方法

第三方jar或者是module很经常会使用到so库,平常我们只需要直接或者根据修改即可直接使用。但是一个项目会经常性的同时使用多个第三方的jar,那么就会出现他们所各自引用的so库才互相产生冲突。原来单独使用都没有问题的。

故障描述:

 java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.nathan.shenfenzhengorc-1/base.apk"],nativeLibraryDirectories=[/data/app/com.nathan.shenfenzhengorc-1/lib/arm, /system/fake-libs, /data/app/com.nathan.shenfenzhengorc-1/base.apk!/lib/armeabi, /system/lib, /vendor/lib, /system/vendor/lib, /product/lib]]] couldn't find "liblept.so"


在百度上会有UnsatisfiedLinkError: dalvik.system.PathClassLoader这个问题的原因描述,那些第三方的so库基本都会根据不同CPU平台而分成"armeabi", "armeabi-v7a", "x86", "mips"”,"arm64-v8a", "x86_64", 这么几种,而第三方的jar只是根据他们的需求只会做个别的so库,所以就会出现某些CPU平台的机型会运行时

出现找不到so库,而有些机型又正常,而我现在的问题是单个第三方jar运行正常,而多个则出现问题。因为当第一个选择了某个CPU的so库时,那么整个APP都会只使用哪个CPU的so

库,那么我的故障就因为是某个第三方的jar不支持某个CPU平台。


解决方法:

首先我先统一他们的所使用的CPU平台,armeabi是几乎所有的平台都可以使用的。

build.gradle:

defaultConfig {
     ...
        ndk {
            abiFilters = ["armeabi"]
        }
    }

再找出哪个第三方的so库缺失,然后去补充:

由于我的第三方jar是直接

compile 'com.rmtheis:tess-two:5.4.1'

第三方的直接编译会在项目中,只能在项目中搜liblept.so,看看一共有多少种CPU的so库,因为是缺失armeabi的库,那么我首先选择armeabi-v7a,或者是arm64-v8a,86的

貌似不怎么支持,找到所缺失的liblept.so所在的文件夹,把里面的所有so库都复制,因为缺失的都基本是整个库都没有的。再到自己项目main文件夹中创建jniLibs文件夹,再创建armeabi文件夹

,把复制的ku都放进去。ok~故障解决。

猜你喜欢

转载自blog.csdn.net/qq_34884729/article/details/78336891