Android 开发 so库文件找不到不错

时间:2024-05-23 08:50:19


java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.imobi.callblocker-2/base.apk"],nativeLibraryDirectories=[/data/app/com.imobi.callblocker-2/lib/arm, /data/app/com.imobi.callblocker-2/base.apk!/lib/armeabi-v7a, /vendor/lib, /system/lib]]] couldn't find "libwebrtc.so"

遇到这个问题,真的很服气,我的领导很长时间没弄出来,这是我第一次解决了他未解决的问题,感觉自己not the same。哈哈,我希望自己能独立,快速的独立。  not the same。

下面说下解决办法 :

这是引用so库时的错误,找不到so文件。

1.首先把在armeabi的同目录下建一个文件夹armeabi-v7a,把armeabi的文件copy一份到armeabi-v7a,build一下项目。

2.

defaultConfig中加入
ndk {
    // 设置支持的SO库架构
    abiFilters 'armeabi' ,'arm64-v8a'
}


在后期的开发中,我又遇到了同样的问题,由于问题的不断地深入我不断的加深对于引入so库文件的理解。上述的方法只是巧合能解决nexus5的手机,但是对于三星的手机是不可行的,原因是由于每种手机的cpu型号不行,所对应的so库文件打包时不同。具体的说一下:其实手机的cpu型号是不同的,有很多的平台,1.armeabiv-v7a: 第7代及以上的 ARM 处理器。2011年15月以后的生产的大部分Android设备都使用它.2.arm64-v8a: 第8代、64位ARM处理器,很少设备,三星 Galaxy S6是其中之一。3.armeabi: 第5代、第6代的ARM处理器,早期的手机用的比较多。4.x86: 平板、模拟器用得比较多。5.x86_64: 64位的平板。这是不同的平台,我们都知道在版本迭代的过程中必须考虑兼容性的问题,在你的程序中首先找的高版本的arm,现在的情况是从v8a开始v7a再到armeabi,再到平板。

你可以在androidstudio中查看你引用的so库,在你的项目中你自己引用的so库不是全部的,你依赖jar包中也会引用so库。下面接受查看你的项目中引用的全部so库,如下图:

Android 开发 so库文件找不到不错按照图中的仙姑目录打开,双击1处,找到2处的lib文件目录,查看引入so库文件的全部详情,so库的打包与cpu平台型号是对应的,不能随便的对应。

假如你有2个so库文件名字为1,2不在同一目录,app项目会根据从高版本查找,一旦找到有一个so引假如是:1,就不会在向下寻找,2在低版本的arm平台就会报错,找不到2.so这个库,如果你看懂了上述的叙述,你肯定就会知道怎样解决,又不明白的欢迎留言,我都在线的。


在这里在加一个小技巧,怎样提取已经apk文件中的jar包:

1.将apk文件的文件类型apk改为zip,2.用解压工具解压后直接搜索.so文件。你明白文件目录的话自己找也不是问题。