清单合并失败错误
我正在将我当前的项目巨大的应用程序移动到Android Studio和Gradle。 我目前被困在以下问题:
Error:(87, 9) Execution failed for task ':App:processDebugManifest'. > Manifest merger failed : Attribute application@label value=(@string/app_label) from AndroidManifest.xml:87:9 is also present at ANDROID_APPLICATION:Library:unspecified:9:18 value=(@string/app_name) Suggestion: add 'tools:replace="android:label"' to <application> element at AndroidManifest.xml:82:5 to override
我已经尝试将以下属性添加到主AndroidManifest.xml
文件中:
tools:replace="android:label, *App Name*" tools:replace="android:label, @string/app_label" tools:replace="android:label"
这些属性定义都不起作用。 我究竟做错了什么?
试试这个:
将此添加到<manifest/>
xmlns:tools="http://schemas.android.com/tools"
将此添加到<application/>
tools:node="replace"
基于此 ,它应该覆盖所有的元素。 “将低优先级声明replace为带注释的声明”。
背景
当清单文件被合并时,与label
属性有冲突。
一般来说,需要将三种types的清单文件合并到一个生成的应用清单中,这里按优先级顺序排列:
- 产品风格和构buildtypes特定的清单文件。
- 主应用程序的清单文件。
- 库清单文件。
决议
冲突可以通过以下两种方式之一来解决:
删除冲突的标签
从库(或更低级别)清单文件中删除冲突的属性。
在这种情况下, ANDROID_APPLICATION:Library:unspecified:9:18 value=(@string/app_name)
定义的@string/app_name
值与主应用程序中的值不同。 所以如果不是必需的,那就删除它 – 只需从库文件的AndroidManifest.xml
文件中删除android:label="@string/app_name"
。
添加一个属性以允许自动解决冲突
在工具名称空间中有几个特殊的属性标记可用于表示如何解决冲突的具体决策。
在这种情况下,要明确地导致主应用程序的android:label
覆盖任何其他(例如库文件)应用程序标签,请将xmlns:tools="http://schemas.android.com/tools"
定义添加到<manifest>
节点和tools:replace="label"
到<application>
节点。
这里是一个例子 – 在主应用程序的AndroidManifest.xml
文件中使用这个例子:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.mycompany.myapp" xmlns:tools="http://schemas.android.com/tools"> <application android:label="@string/app_name" tools:replace="label"/> </manifest>
这种方法也适用于其他相互冲突的属性。 例如,如果icon
属性也有冲突,则可以将其更改为tools:replace="label, icon"
。
如果你像我一样幸运,那么你可以用一个黑客办法来手动修复这个问题。
AAR文件只是扩展名为.aar的.zip文件。 在我的例子中,我将.aar解压缩,从库的AndroidManifest.xml
删除了违规的android:label
,然后用.aar扩展名重新存档剩余的文件,所有东西似乎完全适用于新的.aar。
仅供参考, 这似乎是Android gradle插件中的已知错误 。
我修正了同样的问题。 对我的解决scheme:
- 在清单标记中添加
xmlns:tools="http://schemas.android.com/tools"
行 - 在清单标记中添加
tools:replace=..
- 在清单标签中移动
android:label=...
这里的例子
我也面临同样的问题,并经过大量的研究发现灵魂
- 你的最低SDK版本应该与你使用的模块相同,例如:你的模块min sdk版本是14,你的应用程序最小sdk版本是9它应该是相同的。
- 如果你的应用程序和模块的版本不一样。 再次它应该是一样的
总之,你的应用程序build.gradle文件和清单应该有相同的configuration
- 清单文件中没有相同的权限添加两次,同样的活动提到两次
- 如果您从项目中删除了任何活动,那么也要将其从清单文件中删除
- 有时它的标签,图标等清单文件的标签a)添加清单标签中的xmlns:tools行b)在应用程序标签中添加工具:replace =或tools:ignore =
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.slinfy.ikharelimiteduk" xmlns:tools="http://schemas.android.com/tools" android:versionCode="1" android:versionName="1.0" > <application tools:replace="icon, label" android:label="myApp" android:name="com.example.MyApplication" android:allowBackup="true" android:hardwareAccelerated="false" android:icon="@drawable/ic_launcher" android:theme="@style/Theme.AppCompat" > </application> </manifest>
考虑到这些要点,你将摆脱这个清单合并失败的问题检查我的post:这个问题是由于清单文件或build.gradle文件中的问题。 你可以检查我的posthttps://wordpress.com/post/dhingrakimmi.wordpress.com/23