类/库/so冲突那些事,看这个就够了

53 篇文章 1 订阅

1.简单问题:库版本冲突

使用的多个依赖版本不一致导致冲突,解决方案1.能修改引用版本的,自行修改版本,保证统一 2.排除掉部分库里面的引用 比方说

 implementation('com.shuyu:gsyVideoPlayer-java:7.1.6') {
    exclude group: "tv.danmaku.ijk.media", module: "ijkplayer-java"
}

3.强引用指定使用统一的版本:在项目build.gradle(项目而非module)下,像这样强引用,指定某个版本.

allprojects {
    configurations.all {
    
        resolutionStrategy.force 'com.squareup.retrofit2:retrofit:2.9.0'}
}

2.稍微麻烦点的so库冲突:

1.可以将冲突的其中一个AAR当中的so库进行删除,解压 删除 重新打包 在导入(这种方案需要注意保证多个库在使用的时候必须能加载到so库).删除可以见下方github链接,有简单方案,但是不建议这么做,方案2更好

2.pickFirst过滤,像这样

android {        
packagingOptions {
            pickFirst 'lib/arm64-v8a/libc++_shared.so'
            pickFirst 'lib/armeabi-v7a/libc++_shared.so'
            pickFirst 'lib/x86/libc++_shared.so'
            pickFirst 'lib/x86_64/libc++_shared.so'
           }
}

3.最坑人的类冲突,也是我重点想说的冲突解决方案

这种一般都是aar提供方直接把开源库代码集成打包进去,然后遇到了同样做法的.exclude 是无用的.解决方案只有一个解压当中一个aar,把其中冲突的class/package 删掉,重新打包成AAR进行集成,当然,这种方案网上大批的文章..仅仅这样没有必要来发文章.这里提供一个比较简单的方案,还有这种方案可能遇到的坑.

aar过滤删除class/package/so库可以使用gradle脚本,删除打包.ExcludeAar这个项目,可以很方便的实现.原作者链接ExcludeAar自己做了点修改的链接https://github.com/yushengfangzhu/ExcludeAar,把作者忘记配置的so库排除加上了,还加入了正则,匹配大量的冲突class,可以很方便的进行

这个方案对gradle直接引用的aar很方便.

那么,被开源库引用的aar怎么办呢?到这边就成了gradle的cache文件.

可以看到我们这里有一个冲突,但是项目里面是没有这个库的

这个是阿里的mpaas小程序里面使用的.

接下来就来解决这个冲突.首先找到这个依赖,右键jar包 open in explorer,找到文件缓存位置.然后新建一个空的module

,把对应的文件copy进去 jar包拿过去Exclude 删除类/包放进libs下(这个过程github介绍的非常详细,就不多说废话了) .其他文件放到对应的位置,然后rebuild project就会在 这里得到一个新的AAR.

这时候呢,就把这个AAR上传到maven仓库 ,公有还是私有都可以,为什么一定要传仓库呢?因为后续使用不能已module形式导入.AAR已经得到了,最后就要替换掉原本的库了

在项目的build.gradle下

allprojects {
    configurations.all {
    

        resolutionStrategy.dependencySubstitution {
            substitute module('com.alipay.xmedia.algorithm:algorithm-build') with module('com.alipay:algorithm-build:10.1.60_001')
      }

    }

最后看看效果:

B站这个视频库包名下已经空了,项目可以运行了,mpaas集成成功.最后为什么AAR一定要传maven仓库呢 substitute module('com.alipay.xmedia.algorithm:algorithm-build') with module('com.alipay:algorithm-build:10.1.60_001') 其中 with module()明确规定了com.alipay algorithm-build 10.1.60_001 要由三部分组成,自行可以尝试module形式写在这里替换,会报错的 

 

 转自:关于Android类/库/so冲突那些事,看这个就够了 - 知乎

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值