AndroidX 库和旧的 Android 支持库 (android.support) 之间的冲突 in multiple modules and/or libraries.....

问题背景

我们在做日常的项目开发时经常会需要对接三方SDK或者使用一些三方依赖库已完成项目的需求,但是有时候会在拉入依赖库后报错库文件冲突。

例如今天编译的时候遇到的:

[com.android.support:animated-vector-drawable:28.0.0] C:\Users\code\.gradle\caches\transforms-4\4eb05916f8dcbe9e7330b5deb1cf4b0a\transformed\animated-vector-drawable-28.0.0\AndroidManifest.xml Warning: Namespace 'android.support.graphics.drawable' is used in multiple modules and/or libraries: com.android.support:animated-vector-drawable:28.0.0, com.android.support:support-vector-drawable:28.0.0. Please ensure that all modules and libraries have a unique namespace.

上面只是一个很普通的例子;

报错原因

由于你的项目中同时使用了 AndroidX 库和旧的 Android 支持库 (android.support) 之间的冲突。这些库中有相同的类和属性,因此在编译时会产生冲突。

解决方案

1.迁移到 AndroidX

确保你的项目完全迁移到 AndroidX。旧的 android.support 库和 AndroidX 库不能共存,所以你需要将所有的 android.support 依赖项替换为相应的 AndroidX 依赖项。

gradle.properties 文件中添加以下行,确保项目迁移到 AndroidX:

android.useAndroidX=true
android.enableJetifier=true
2.tools:replace手动处理冲突

如果不能完全迁移到 AndroidX 或者你的项目中有第三方库依赖旧的 android.support,咱们可以尝试以下方式手动处理冲突

AndroidManifest.xml 中添加 tools:replace 以覆盖冲突的属性。例如:

<application
    android:allowBackup="true"
    tools:replace="android:appComponentFactory"//这一行
    android:appComponentFactory="androidx.core.app.CoreComponentFactory"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    ...
</application>

tips:这玩意儿有时候治标不治本,会导致其他问题

3.排除冲突的依赖项

可以尝试在 build.gradle 文件中排除冲突的依赖项。

这是我常用的一个方法,因为之前Glide有个版本的库比较老,但是里面有个图片处理的功能,我经常用到,就会使用下面的方法把support库给干掉

build.gradle文件(app下的)

implementation('ai.advance.mobile-sdk.android:liveness-detection-ui:1.1.1') {
    exclude group: 'com.android.support'
}
implementation('ai.advance.mobile-sdk.android:liveness-detection:1.1.1') {
    exclude group: 'com.android.support'
}
4.联系第三方库支持

如果这个问题持续存在,可以联系第三方库的支持团队,询问是否有专门的 AndroidX 版本或者推荐的解决方案。

5.更改依赖的方式

我们平时使用一些三方库,一般都是直接在build.gradle直接引用,然后自己调用人家的API就行了,但仔细想想,我们还可以使用AAR依赖和module依赖。

我们可以直接去github把他代码拿过来,进行二开,以module的形式引入项目进行依赖,哪儿不对就改改,还可以定制化开发。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

&岁月不待人&

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值