首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Android 开发 so库文件找不到不错

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

作者头像
zhangjiqun
发布于 2024-12-16 12:50:56
发布于 2024-12-16 12:50:56
1.2K0
举报
文章被收录于专栏:计算机工具计算机工具

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中加入

代码语言:javascript
复制
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库,如下图:

按照图中的仙姑目录打开,双击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文件。你明白文件目录的话自己找也不是问题。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-06-05,如有侵权请联系 cloudcommunity@tencent.com 删除
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档