这个问题困扰了我好几天,今天终于解决了,记录一下
参考:http://www.cnblogs.com/poe-blog/p/4728970.html
声明:这是从网上找到的一个解决方案,不是本人自己研究得出,写此篇目的是让自己记住自己走过的弯路,也让遇到此类问题的人少走弯路。
一:最近公司正在做手机直播项目,涉及到手机推流及直播rtmp流需要封装ffmpeg的so库,于是乎从网上找了个这类的demo改之,总算是实现了推流服务。
二:近来,github上fresco框架用的很火,我也准备尝试在项目中导入该框架实现图片加载。
没想到的是当集成直播框架时可以运行,但当fresco框架集成进来后,公司一款三星S6只要一打开推流应用就挂,报错如下:
java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.wanwan.amusement-1/base.apk"],nativeLibraryDirectories=[/data/app/com.wanwan.amusement-1/lib/arm64, /vendor/lib64, /system/lib64]]] couldn't find "libijkffmpeg.so" |
问题原因:64位机器默认去查找arm64-v8a目录下是否有合适的64位库,如果没有则回去libs下查找32位的库,而fresco的draw-pipeline太完善了考虑了64位的机器所以他的arm64-v8a下有so库,对应的系统就创建了lib64的文件,而不再去找32位的库。
解决方案:(1)编辑build.gradle android { // rest of your app's logic splits { abi { enable true reset() include 'x86', 'x86_64', 'arm64-v8a', 'armeabi-v7a', 'armeabi' universalApk false } } }(*)注意上面的红色部分要删除掉,写成下面这样:
android { // rest of your app's logic splits { abi { enable true reset() include 'x86', 'x86_64', 'armeabi-v7a', 'armeabi' universalApk false } } }(2)如果还报错,注释掉下面一行( 如果你的主要工程目录没有加入lib和jar的话)
dependencies { // compile fileTree(include: ['*.jar'], dir: 'libs') }原理:
enable: enables the ABIs split mechanism
exclude: By default all ABIs are included, you can remove some ABIs.
include: indicate which ABIs to be included
reset(): reset the list of ABIs to be included to an empty string (this allows, in conjunctions with
include, to indicate which one to use rather than which ones to ignore)
universalApk: indicates whether to package a universal version (with all ABIs) or not. Default is false.