构建APK时报Manifest merger failed错误,androidx与support库冲突如何解决
错误原因
该Manifest合并失败是因为项目依赖中同时存在旧版Android Support库和新版AndroidX库,两个库的Manifest文件都定义了appComponentFactory属性,构建时无法确定以哪个为准,所以抛出冲突错误。
解决方案
推荐优先选择方案一彻底解决,方案二仅作为临时应急使用。
方案一:全项目统一迁移到AndroidX(推荐)
Google已停止维护Android Support库,所有新官方组件均基于AndroidX开发,迁移后可彻底避免此类兼容冲突:
- 第一步:清理
build.gradle的冗余冲突依赖
删除所有旧Support库依赖与重复依赖:// 删掉这两行旧Support库依赖 implementation 'com.android.support:appcompat-v7:25.2.0' implementation 'com.android.support:design:28.0.0' // 删掉重复引入的Branch SDK,保留一个版本即可,建议保留更高的5.+版本 implementation 'io.branch.sdk.android:library:4.+' - 第二步:在项目根目录的
gradle.properties文件中添加以下两行配置,开启AndroidX支持并自动转换第三方库的Support引用:android.useAndroidX=true android.enableJetifier=true - 第三步:修改
build.gradle中的测试运行器为AndroidX版本:
把defaultConfig下的
替换为testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
修改完成后重新构建项目即可解决冲突。
方案二:临时强制覆盖Manifest属性(不推荐)
如果暂时没有时间做全量迁移,可以通过修改Manifest强制覆盖冲突属性应急:
- 第一步:在
AndroidManifest.xml的根<manifest>标签中添加tools命名空间:<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="io.branch.branchster" ...> - 第二步:在
<application>标签中添加覆盖配置:<application android:largeHeap="true" android:allowBackup="true" android:name="io.branch.branchster.ApplicationMainClass" android:icon="@drawable/ic_launcher" android:label="@string/app_name" tools:replace="android:appComponentFactory" android:appComponentFactory="androidx.core.app.CoreComponentFactory">
该方法仅能解决当前Manifest合并错误,后续仍可能出现其他Support和AndroidX的兼容问题。
内容的提问来源于stack exchange,提问作者Jay S
相关产品推荐
相关产品推荐

