Suggestion: add 'tools:replace="android:icon"' to element
背景:
今天在用Android Studio开发时,遇到一个问题,建了一个项目,依赖了一个自己写的库,在编译时报了这个错误,大致的原因是资源与库在清单文件里引用了相同的资源文件,Gradle插件默认会启用Manifest Merger Tool,就会发生冲突。
错误提示:
Error:Execution failed for task ':loggertest:processDebugManifest'. Manifest merger failed : Attribute application@icon value=(@mipmap/iclauncher) from AndroidManifest.xml:7:9-43 is also present at [TuringOSLoggerAPI:app:unspecified] AndroidManifest.xml:16:9-45 value=(@drawable/iclauncher). Suggestion: add 'tools:replace="android:icon"' to element at AndroidManifest.xml:5:5-18:19 to override.
解决方法
- 将依赖库中清单文件,引用的依赖库的清单文件中的,冲突部分删除掉,我这里主要删除了<android:icon="@drawable/ic_launcher">,删除过后,编译正常,程序编译通过
- 根据IDE提示修改,首先在项目的清单文件的根标签下引入xmlns:tools="http://schemas.android.com/tools",注意不是依赖库的的清单文件里,已测试不可行,之后在application里的标签里加入tools:replace="android:icon"之后重新build,即可通过编译,theme问题同样这样解决:tools:replace=”android:icon, android:theme”,如下: