处理Gradle依赖冲突

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了处理Gradle依赖冲突相关的知识,希望对你有一定的参考价值。

参考技术A     在android开发过程中会总会引入一些第三方依赖库,无可避免的会遇到jar/aar包冲突,Manifest合并冲突,资源冲突等问题

    基于此本次主要记录下如何处理类冲突,jar/aar版本冲突。先由常见的com.ta.utdid2.a.a.a found in modules alicloud-android-utdid-2.5.2 android-utdid冲突入手,常见于支付宝sdk和友盟Sdk的冲突。

磨刀不误砍材工,在处理冲突问题前,要先了解下如何查看Gradle依赖树,在AS的Terminal里输入 gradle :app:dependencies 即可查看gradle依赖树。输出结果如下(示意)

输出依赖树后,在里面搜索android-utdid,会发现有多个第三方库对utdid存在引入关系。

经过查看得知utdid我依赖为:com.aliyun.ams:alicloud-android-utdid:2.5.2

该依赖库的Group为com.aliyun.ams。module为alicloud-android-utdid

下面要做的就是去除其他依赖对utdid的引入,仅保留一次有效的引用关系即可。

implementation ('com.xxx:yyy:0.0.0.4')

        exclude module: 'alicloud-android-utdid'

   

implementation ('com.aaa:bbb:0.4')

        exclude module: 'alicloud-android-utdid'

   

    常规查阅资料大家推荐去除重复引入的方法都是exclue group。实际上如该group下的依赖项较多,且只想去除某一个依赖时,这时使用exclude module能更细节且准确的控制去除某一项的引用关系。

以上为utdid的处理方式

关于微信sdk冲突的处理方式

    问题背景:我方已集成wechat-sdk-android-with-mta sdk用作分享和支付功能,随着业务发展需要接入一个第三方业务Sdk,该Sdk内部具备支付功能,他们也进行了wechat-sdk-android-with-mta的引入,且两个微信sdk的版本不一致。

    此时如果进行打包就会爆出各种com.tecent.xx的类冲突。

    处理方式参照支付宝sdk的冲突方式

    implementation ('com.xxx:zzz:0.6')

        exclude module: 'wechat-sdk-android-with-mta'

   

  关于百度地图API_KEY冲突的处理方式

  百度地图需要在主工程的Manifest里注册一个API_KEY。如此时引入的第三方Sdk里同样有百度地图,且已经在内部注册了com.baidu.lbsapi.API_KEY。

  此时会出现Manifest.xml的合并冲突。解决方式为增加tools:replace="android:value"属性即可

          <meta-data

            android:name="com.baidu.lbsapi.API_KEY"

            android:value=""

            tools:replace="android:value"/>

    在开发中不同第三方Sdk对基础依赖的版本会发生变化,比如ktx和compact的版本。需要强制指定这些基础依赖的版本统一

    方式为在build.gradle(app)里增加

    configurations.all

    resolutionStrategy.force'androidx.core:core-ktx:1.8.0-alpha01'

   

    后续将持续添加AndroidStudio里各种冲突的处理方式。

以上是关于处理Gradle依赖冲突的主要内容,如果未能解决你的问题,请参考以下文章

Android Gradle 插件Android 依赖管理 ⑥ ( 依赖冲突处理 | transitive 依赖传递设置 | exclude 依赖排除设置 | force 强制指定依赖库 )

Gradle 依赖&解决依赖冲突

Gradle打包冲突,exclude依赖

Gradle:如何显示发生依赖冲突的位置

Android Gradle 插件Gradle 依赖管理 ⑥ ( dependencies 依赖查找路径 | dependencies 依赖冲突 | dependencies 依赖库层级分析 )

Java Gradle入门指南之依赖管理(添加依赖仓库版本冲突) (转)