安卓开发解决java.lang.UnsatisfiedLinkError
来源:互联网 发布:魔兽争霸3数据库 编辑:程序博客网 时间:2024/06/03 18:18
产生原因:
在安卓开发中,引用了多方的sdk的so库之后,不同机型之间就会发生这样一个错误:
Java.lang.UnsatisfiedLinkError,这是由于程序运行的时候未获取到争取的so库包产生的一个错误:
你原先的项目中只使用了A公司提供的so包,他只提供了armeabi这个架构的so包,后来项目需要又引用了B公司的提供的sdk,里面提供的so包还挺全的,arm64-v8a,armeabi-v7a,mips,mips64,x86等等,结果你就全放进去了, 后来发现突然某手机就出现了崩溃,然后一般都是因为这个问题Java.lang.UnsatisfiedLinkError。
解决过程:
1.引入多种 so 库,如果只需要其中的几种,可以在gradle中添加下面的配置(比如):
productFlavors { arm { ndk { abiFilters "armeabi-v7a", "armeabi" } } x86 { ndk { abiFilter "x86" } }}这样在编译的时候arm只会引入armeabi-v7a和armeabi,在x86只会引入x86包
同时需要在 gradle.properties 中添加:
android.useDeprecatedNdk = true
2.后面我发现在小米4、锤子 T2 等手机上打开接入了这个库的 app 直接闪退了。经过分析发现,在小米 4、锤子 T2 等手机上运行我们的 app ,系统会先去找 arm64-v8a 这个目录下的 so 文件,如果不存在还好,偏偏我的 app 存在 arm64-v8a 目录,此时因为找不到目录下的 so 文件,就直接报 java.lang.UnsatisfiedLinkError:couldn't find "*****.so" 的错了。
在 stackoverflow 上找到了解决的答案:
When you install an APK on Android, the system will look for native libraries directories (armeabi, armeabi-v7a, arm64-v8a, x86, x86_64, mips64, mips) inside the lib folder of the APK, in the order determined by Build.SUPPORTED_ABIS.
If your app happen to have an arm64-v8a directory with missing libs, the missing libs will not be installed from another directory, the libs aren't mixed. That means you have to provide the full set of your libraries for each architecture.
So, to solve your issue, you can remove your 64-bit libs from your build, or set abiFilters to package only 32-bit architectures:
android { defaultConfig { ndk { abiFilters "x86", "armeabi-v7a" } } buildTypes { }
如果照上面的配置,那打包时就只会把 "x86", "armeabi-v7a" 这两个目录及其下的 so 文件打包进 apk 。我们的问题也解决了,因为系统也只能找这两个目录下的 so 文件了。
- 安卓开发解决java.lang.UnsatisfiedLinkError
- java.lang.UnsatisfiedLinkError解决思路
- 安卓开发时:UnsatisfiedLinkError
- JNI异常:java.lang.UnsatisfiedLinkError-已解决
- 解决 windows下 sigar java.lang.UnsatisfiedLinkError
- 解决:java.lang.UnsatisfiedLinkError: No implementation found
- DYLD_LIBRARY_PATH Mac 开发问题 java.lang.UnsatisfiedLinkError
- android studio JNI开发报错:java.lang.UnsatisfiedLinkError: Native method not found:... 的解决措施
- 安卓 java.lang.classnotfoundexception解决
- java.lang.UnsatisfiedLinkError翻译
- java.lang.UnsatisfiedLinkError问题
- java.lang.UnsatisfiedLinkError:sayHello()
- jni java.lang.UnsatisfiedLinkError
- java.lang.UnsatisfiedLinkError
- JNI java.lang.UnsatisfiedLinkError
- JNI java.lang.UnsatisfiedLinkError
- JNI java.lang.UnsatisfiedLinkError
- java.lang.UnsatisfiedLinkError
- X86汇编调用框架浅析与CFI简介
- DataTable 批量插入SqlServer数据库 使用:SqlBulkCopy
- NKOJ-3789 营养午餐
- JavaScript-客户端检测
- 下载进度条模板
- 安卓开发解决java.lang.UnsatisfiedLinkError
- Fully Convolutional Networks for Semantic Segmentation
- ASCII码对照表
- 虚拟机类加载机制
- Toast认识吗?教你如何打造炫酷Toast
- Shiro_001
- 博弈搜索练习-极大极小值搜索+AlphaBeta剪枝--POJ 1085-Triangle War/三角点格棋
- Android中Kotlin简单入门(一)
- REACT-REDUX用法详解