我正在运行 Android Studio 2.0 Beta 3。我有一个依赖于外部库的项目。当我使用 Android Studio 构建时,我收到以下错误消息:
($my_project_path)/build/intermediates/manifest/tmp/manifestMerger354333932548019277.xml:17:9-36 Error:
Attribute application@allowBackup value=(false) from [debug] AndroidManifest.xml:17:9-36
is also present at [($library)] AndroidManifest.xml:12:9-35 value=(true)
Suggestion: add 'tools:replace="android:allowBackup"' to <application> element at manifestMerger354333932548019277.xml:7:5-9:19 to override
Error:Execution failed for task ':$(project):processDebugAndroidTestManifest'.
> java.lang.RuntimeException: Manifest merger failed : Attribute application@allowBackup value=(false) from [debug] AndroidManifest.xml:17:9-36
is also present at [($library)] AndroidManifest.xml:12:9-35 value=(true)
Suggestion: add 'tools:replace="android:allowBackup"' to <application> element at manifestMerger354333932548019277.xml:7:5-9:19 to override
这很奇怪。 Android Studio 建议我编辑中间构建步骤的产品以使编译完成?另外,当我查看有问题的源 AndroidManifest.xml 时,上层已经将“tools-replace”属性定义为“android:allowBackup”。简而言之,我不知道为什么我应该收到这条消息。此外,我的构建在命令行中运行得非常好。有什么建议吗?
EDIT 基于评论:一些评论者注意到我需要遵循错误消息中非常明确的指示,只有这些评论者遗漏了错误消息指示我编辑中间版本产品。
非常清楚:中间构建产品不是构建系统应该永远、永远指示用户修改的东西。根据定义,它是仅供构建系统使用的东西。它唯一的额外用途是保存状态,以便用户可以对错误的构建进行故障排除。 Android Studio 告诉我修改此文件的事实证明,Android Studio 中或更可能是我的配置和/或构建脚本中存在严重问题。但是,什么?
为了澄清,这里是 <application>
来自包含库的项目的元素:
<application
android:label="@string/app_name"
android:allowBackup="false"
tools:replace="android:allowBackup">
<...>
</application>
如您所见,我正在声明 Android Studio 提示的元素,这正是我被要求的方式。除了不!因为 Android Studio 要求我修改 merged AndroidManifest.xml - 显然我不应该这样做,因为它是一个构建产品。这个项目是在我所有同事的机器上构建的,因为他们没有更新到最新的 Android Studio。现在由我来承担,坦率地说,我认为对我来说最好的办法是卸载 Android Studio 并重新开始。
最佳答案
错误信息告诉你如何解决问题
Suggestion: add 'tools:replace="android:allowBackup"' to <application> element
基本上,您声明了 allowBackup
Manifest 属性两次。一次在 AndroidManifest.xml 文件中,一次在库中(可能通过 gradle)。
仅供引用,在这种情况下,gradle 声明将胜出。
关于Android Studio 构建错误 : manifestMergerXXXX?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35137919/