处理Gradle依赖冲突

    在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"属性即可

         

            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依赖冲突)