UnsatisfiedLinkError、couldn't find "xxx.so"
来源:互联网 发布:小智 超级真新人 知乎 编辑:程序博客网 时间:2024/06/13 03:17
相关环境仅作参考
android 6.0.1cpu 高通骁龙625 8核 2.0Ggradle 3.3com.android.tools.build:gradle 2.2.3
错误日志:
java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.telecom.video-1/base.apk"],nativeLibraryDirectories=[/data/app/com.telecom.video-1/lib/arm64, /data/app/*packagename*-1/base.apk!/lib/arm64-v8a, /vendor/lib64, /system/lib64]]] couldn't find "libijkffmpeg.so"
分析
项目目录中的仅配置了armeabi-v7a目录
../lib |-armeabi-v7a |-libijkffmpeg.so |-..
从日志中看到虚拟机加载了/lib/arm64 和 /lib/arm64-v8a,没有/lib/armeabi-v7a,不科学啊
对生成的apk分析
apk中lib/ |-armeabi-v7a |-libijkffmpeg.so |-libsophix |-.. |-x86_64 |-libsophix |-arm64-v8a |-libsophix |-armeabi |-libsophix |-x86 |-libsophix
发现存在多个cpu兼容目录,而我们只兼容armeabi-v7a,根据apk发现其中的libsophix是项目中的一个依赖其包含了多个兼容库被一起打包到了apk中,这里根据项目的情况只想要一个兼容库。
解决
我在build.gradle中这样配置,增加了过滤设置cpu兼容:
android { defaultConfig { ndk { abiFilter "armeabi-v7a" //, "armeabi", "x86" 按需设置 } }}
然后再次分析apk,其仅兼容armeabi-v7a了:
apk中lib/ |-armeabi-v7a |-libijkffmpeg.so |-libsophix.so |-..
虚拟机加载so库时,如果发现arm64-v8a目录,就只加载arm64-v8a目录(但是为啥还有个arm64目录?)
arm64-v8a中显然没有目标so,所以报错。其实还可以将armeabi-v7a中的so文件copy到arm64-v8a中,但不是个好方法,因为我们的目标是兼容armeabi-v7a,不同的cpu版本有不同的开发接口。
阅读全文
2 0
- UnsatisfiedLinkError、couldn't find "xxx.so"
- Android6.0 UnsatisfiedLinkError couldn't find "xxx.so"
- java.lang.UnsatisfiedLinkError:dalvik.system.PathClassLoader couldn't find .so
- arm64-v8a中couldn't find "XXX.so”
- AndroidStudio打包dalvik.system.PathClassLoader:couldn't find"xxx.so "
- 找不到so文件java.lang.UnsatisfiedLinkError: dalvik.sys.... couldn't find "libijkffmpeg.so"
- java.lang.UnsatisfiedLinkError: Couldn't load XXX
- couldn't find "libyuv.so
- couldn't find "libvinit.so"
- couldn't find "libweibosdkcore.so"
- couldn't find "libgnustl_shared.so"
- couldn't find "libxxx.so"
- 解决java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader couldn't find "libDatabaseOp.so"
- 1.1解决Android studio中 java.lang.UnsatisfiedLinkError couldn't find "libcsiipowerenter.so问题
- Android之运行的错误:java.lang.UnsatisfiedLinkError: Couldn't find cibloger.so
- java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader......couldn't find "libweibosdkcore.so
- 如何解决java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList couldn't find xx so
- 解决Android 错误 couldn't find "xxx.so" is 32-bit instead of 64-bit
- android中react-native热更新
- nginx中获取真实ip
- SIP 中的Dialog,call,session 和 transaction
- sql server 查询结果集 列 转行 过程
- iOS小技巧总结,绝对有你想要的
- UnsatisfiedLinkError、couldn't find "xxx.so"
- 安卓实现后台静默启动Activity(非异步)
- 文字检测与识别资料整理
- Spring Cloud入门教程(六):API服务网关(Zuul) 下
- 欢迎使用CSDN-markdown编辑器
- 几种简单排序
- JavaScript常用事件及其区别
- 【Angular】ng-disabled的用法;
- DCM示例文件下载网站