【Android】导入第三方库时,关于so文件的一些思考
2016-11-29 15:39
351 查看
测试手机:红米note3
手机abi:arm64-v8a
首先问题的起源于异常如下:
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
在此之前,库的目录(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位版本,可以更好的利用该架构的芯片,得到更高性能。
原文地址:http://blog.csdn.net/u011511368/article/details/51451121
手机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)1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
在此之前,库的目录(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位版本,可以更好的利用该架构的芯片,得到更高性能。
原文地址:http://blog.csdn.net/u011511368/article/details/51451121
相关文章推荐
- 【Android】导入第三方库时,关于so文件的一些思考
- 关于Android的.so文件---多个第三方库加载到工程读取不到.so的解决办法
- Android工程文件导入Jar包和So第三方库
- 关于Android的.so文件---多个第三方库加载到工程读取不到.so的解决办法
- 关于Android的.so文件导入问题
- 关于产品设计的一些思考——小米2自带文件管理
- 关于Android编程中对于文件的读写的一些小程序
- 关于Android中ANR的一些思考
- Android开发通过.db文件导入已有数据库、导入第三方数据库文件
- android源码下导入第三方jar包和so文件
- 关于对象文件在进行连接时的一些思考
- Android关于OutOfMemoryError的一些思考
- Android 关于 如何使用外界导入的数据库文件
- 关于通过DDMS向Android系统的模拟器的sdcard中导入mp3文件的问题
- 关于Android中ANR的一些思考
- 关于将EXCEL文件导入到MYSQL数据库的一些方法
- 关于Android打开/关闭飞行模式的一些思考
- 关于Android中ANR的一些思考
- 搜寻了关于android推送资料后的一些思考
- [安卓]Android导入第三方静态库.a编译成动态库.so