在android开发中,butterkinfe 是一个非常好用的库,能极大的减少代码量,简化开发,提示开发效率。但在使用其最新版本(10.1.0)进行项目编译时,会得到一个错误信息: “ERROR: Manifest merger failed”,如何解决呢?
问题描述
按照 butterkinfe 的官方文档,在 app module 对应的 build.gradle 文件中加入 butterkinfe 库,
1 | dependencies { |
文件保存以后, 代码的第3行会在 Android Studio 中会被红线标记,提示出错。出错信息为:
1 | Dependencies using groupId com.android.support and androidx.* can not be combined but found IdeMavenCoordinates{myGroupId='com.android.support', myArtifactId='cursoradapter', myVersion='28.0.0', myPacking='aar', myClassifier='null'} and IdeMavenCoordinates{myGroupId='androidx.lifecycle', myArtifactId='lifecycle-runtime', myVersion='2.0.0', myPacking='aar', myClassifier='null'} incompatible dependencies less... (⌘F1) |
如果不理会以上的错误信息,强行进行编译、构建,则会构建失败,并得到如下的错误信息:
1 | ERROR: Manifest merger failed : Attribute application@appComponentFactory value=(android.support.v4.app.CoreComponentFactory) from[com.android.support:support-compat:28.0.0] AndroidManifest.xml:22:18-91 |
初看这个错误信息,会以外解决问题出现在 AndroidManifest.xml 文件中,并试图根据提示在 AndroidManifest.xml 中的 application 节点中增加 tools:replace=”android:appComponentFactory 属性,但问题依旧。
解决方法
其实如果仔细查看 Android Studio 中的红线标记中的提示就可以看出来,问题的关键是 Android 的兼容包出的问题。在新版的 butterkinfe 中,使用了 Android 官方新的兼容包 androidx, 而不再用 appcompat 包。但使用 Android Studio 新建的项目默认还是使用的是 appcomat。因此造成了库依赖的错误。
要解决这个问题,有两种方案:
- 使用低版本的 butterkinfe
- 将项目的兼容依赖库换位 androidx 。
在这里我们选择使用第二种方案,将项目的兼容依赖库换为 androidx。
直接使用 Android Studio 中的菜单项即可完成切换的工作,在菜单上选择 Refactor -> Migrate to AndroidX…, 然后根据提示进行操作即可。
切换以后, build.gradle 文件中的依赖项变为:
1 | dependencies { |
然后就可以顺利的进行编译、构建项目了。