【Android】导入第三方库时,关于so文件的一些思考
来源:互联网 发布:网络音乐的主要格式是 编辑:程序博客网 时间:2024/06/05 00:39
测试手机:红米note3
手机abi:arm64-v8a
首先问题的起源于异常如下:
java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/xxx.xxxxx.xxx/base.apk"],nativeLibraryDirectories=[/data/app/xxx.xxxxx.xxx/lib/arm64, /vendor/lib64, /system/lib64]]] couldn't find "libxxxx_4_1.so" at java.lang.Runtime.loadLibrary(Runtime.java:366) at java.lang.System.loadLibrary(System.java:989) at com.baidu.mapapi.BMapManager.<clinit>(Unknown Source) at xxx.xxxxx.xxx.XxxxApplication.initEngineManager(XxxxApplication.java:195) at xxx.xxxxx.xxx.XxxxApplication.onCreate(XxxxApplication.java:105) at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1016) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4797) at android.app.ActivityThread.access$1500(ActivityThread.java:176) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1498) at android.os.Handler.dispatchMessage(Handler.java:111) at android.os.Looper.loop(Looper.java:194) at android.app.ActivityThread.main(ActivityThread.java:5578) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:955) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:750)
在此之前,库的目录(so部分)如下:
出现问题的原因是 在上图的arm64-v8a中没有找到libxxxx_4_1.so。不过实际,也真的没有这个文件,第三方都未提供64位的版本,而针对库的支持有如下规则(如有纰漏,欢迎评论指正):
64手机支持32库、64库
32手机支持32库
即理论上仅提供32位的库,就可以满足支持。所以我试着将目录arm64-v8a删除,但是之后运行,错误依旧在。
好,我就来看看这个错误。这个异常很明显是说,系统试图从nativeLibraryDirectories中加载指定的so文件,但没找到。我原先的想法,如果arm64-v8a中找不到,系统应该到armeabi中去找,毕竟armeabi是个缺省的so目录。但实际结果貌似不会去armeabi中查到。
但是奇怪的是,删除arm64-v8a目录之后,运行也出错。按照简单理解,arm64-v8a目录已经没有了,应该不会在从arm64目录中找so才是。除非,系统根据手机abi指定目录加载,然而实际不是。
至此要感谢合作方(@范淋)的帮助找到了这个资源,system-loadlibrary-couldnt-find-native-library-in-my-case,主要信息如下图:
他的说法中有建议直接打开(解压缩的形式)生成的apk文件,查看是否有”不合理”的目录存在。在我的情况中的确看到了arm64-v8a目录。目录中有一个其他第三方的so文件,最后问题由于依赖项目有个arm64-v8a目录,所以如果要移除某个类目,一定要删干净。
从原则来讲,只要提供armeabi和armeabi-v7a 就可以满足兼容支持,但是如果能提供完整的64位版本,可以更好的利用该架构的芯片,得到更高性能。
- 【Android】导入第三方库时,关于so文件的一些思考
- 【Android】导入第三方库时,关于so文件的一些思考
- 关于Android的.so文件导入问题
- Android Studio 关于so文件导入的若干方案
- 关于Android Studio导入第三方.so库,找不到so库以及找不到so库中方法的问题
- 关于android 导入第三方.so库文件在低版本Android手机上正常使用,在5.0版本的手机上就出现闪退
- android 应用导入第三方jar、so文件
- Android 导入so文件
- 关于Android的.so文件
- 关于Android的.so文件
- 关于android studio导入jar包以及使用so库的一些心得w
- android-studio导入-so文件的方法
- 关于Android的.so文件---多个第三方库加载到工程读取不到.so的解决办法
- 关于Android的.so文件---多个第三方库加载到工程读取不到.so的解决办法
- Android Studio导入第三方类库的方法( jar包、so文件、zip包等资源文件引入)
- 关于Android studio导入so库文件失败
- 关于sessions.ser文件的一些思考
- 关于python导入模块和package的一些深度思考
- iOS学习之—— NSUserDefaults
- FMDB简单使用(附github源代码)
- 第十二周实践项目3-数组类运算的实现
- 计算机程序的构造和解释 练习1.9
- 第六次上机作业
- 【Android】导入第三方库时,关于so文件的一些思考
- java 学习之四 ArrayList
- 几种基础的算法学习 (php)
- 第十周上机时间项目——项目1—点圆圆柱类族的设计
- JAVA字符串与字符编码处理的终极解决
- Windows远程调试Linux上的C++程序:Eclipse+MingW+Samba+GDBserver
- c++实验六 项目3
- shell字符处理命令,通配符,正则表达式
- ARM平台移植libcurl curl-7.49.0