Android集成Fresco框架导致在64位机器上(三星S6,华为P8等)找不到其他so库

这个问题困扰了我好几天,今天终于解决了,记录一下


参考: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.


  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值