明显的合并失败错误

我正在把我目前的项目中巨大的应用程序转移到安卓工作室和 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"

这些属性定义都不起作用。我哪里做错了?

93138 次浏览

试试这个:

把这个加到 <manifest/>

xmlns:tools="http://schemas.android.com/tools"

把这个加到 <application/>

tools:node="replace"

基于 这个,它应该覆盖所有元素

背景资料

在合并清单文件时,与 label属性发生冲突。

通常,需要合并到单个结果应用程序清单中的清单文件的 有三种类型,在这里按优先级顺序排列:

  1. 特定于产品风格和生成类型的清单文件。
  2. 应用程序的主清单文件。
  3. 库清单文件。

决心

这种冲突可以通过以下两种方式之一来解决:-

去掉冲突的标签

从库(或较低级别)清单文件中删除冲突属性。

在这种情况下,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"

如果您像我一样幸运的话,您可以使用一个 hacky 解决方案手动修复这个问题。

AAR 文件只是。压缩文件。Aar 扩建工程。在我的情况下,我解开了。Aar,从库的 AndroidManifest.xml中删除违规的 android:label,然后使用。Aar 扩展和一切似乎与新的完美工作。啊。

仅供参考 这似乎是一个已知的错误,在安卓级插件

我也面临着同样的问题,经过大量的研究找到了解决办法

  1. 您的 min sdk 版本应该与您正在使用的模块相同 你的模块 min sdk 版本是14,你的应用程序 min sdk 版本是9 应该是一样的。
  2. 如果构建版本的应用程序和模块不相同。它应该再次相同

简而言之,应用程序 build.gradle 文件和清单应该具有相同的配置

  1. 没有双重性,如同样的权限添加在清单文件两次,同样的活动提到两次
  2. 如果已经从项目中删除了任何活动,也请从清单文件中删除它
  3. 有时是因为清单文件的标签、图标等标签 A)在清单标记中添加 xmlns: tools 行 B)在应用程序标记中添加 tools: place = 或 tools: 忽略 = 例子
   <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>

考虑到这些要点,您将摆脱这个明显的并购失败的问题 检查我的帖子: 这个问题是由于在 Manifest 文件或 build.gradle 文件中的问题。你可以检查我的帖子 Https://wordpress.com/post/dhingrakimmi.wordpress.com/23

我解决了同样的问题,我的解决办法是:

  1. 在清单标记中添加 xmlns:tools="http://schemas.android.com/tools"
  2. 在清单标记中添加 tools:replace=..
  3. 在清单标记中移动 android:label=...

举个例子

我刚搬走

android:label="@string/app_name

成功了!

我修改了清单文件

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example">


<application
android:allowBackup="true"
android:label="@string/app_name"
android:supportsRtl="true">
<activity android:name=".SomeActivity"/>
</application>
</manifest>

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example"
xmlns:tools="http://schemas.android.com/tools">


<application
android:allowBackup="true"
android:label="@string/app_name"
android:supportsRtl="true"
tools:replace="android:label">
<activity android:name=".SomeActivity"/>
</application>
</manifest>

现在,android:label被来自父应用程序的标签替换。

尝试添加 android.useAndroidX=trueandroid.enableJetifier=truegradle.properties文件中。 它帮助我解决了我的问题。

我也遇到了同样的问题。在我的例子中,AndroidManifest.xml 文件中的 android:label是空的。然后我把它改成如下

android:label="@string/app_name

也许这个简单的解决方案能帮到别人,谢谢。