清单合并失败错误

新手上路,请多包涵

我正在将我当前项目的大型应用程序移动到 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"

这些属性定义都不起作用。我究竟做错了什么?

原文由 James King 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 463
2 个回答

试试这个:

将此添加到 <manifest/>

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

将此添加到 <application/>

 tools:node="replace"

基于 ,它应该覆盖所有元素。 “用带注释的声明替换较低优先级的声明。”

原文由 Kayvan N 发布,翻译遵循 CC BY-SA 4.0 许可协议

背景

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

通常,需要 将三种类型 的清单文件合并到一个生成的应用程序清单中,这里按优先顺序排列:

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

决议

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

删除冲突的标签

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

在这种情况下, ANDROID_APPLICATION:Library:unspecified:9:18 value=(@string/app_name) 有一个 @string/app_name 定义的值与主应用程序中的值不同。因此,如果不需要,则将其删除——只需从库文件的 AndroidManifest.xml 文件中删除 android:label="@string/app_name" 即可。

添加一个属性以允许自动解决冲突

几个特殊的属性标记(在 tools 命名空间中)可用于表达如何解决冲突的特定决定。

在这种情况下,要明确导致主应用程序的 android:label 覆盖任何其他(例如库文件)应用程序标签,请将 xmlns:tools="http://schemas.android.com/tools" 定义添加到 —64c10deb27d0b76c84e1775590- <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"

原文由 CJBS 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题