我正在将当前项目的大型应用程序迁移到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"
这些属性定义都不起作用。我做错了什么?
答案 0 :(得分:137)
尝试一下:
将此添加到<manifest/>
xmlns:tools="http://schemas.android.com/tools"
将此添加到<application/>
tools:node="replace"
基于this,它应该覆盖所有元素。 &#34;用带注释的声明替换低优先级声明。&#34;
答案 1 :(得分:33)
合并清单文件时,与label
属性存在冲突。
通常,there are three types清单文件需要合并到一个生成的应用清单中,按优先顺序排列:
可以通过以下两种方式解决冲突: -
从库(或更低级别)清单文件中删除冲突属性。
在这种情况下,ANDROID_APPLICATION:Library:unspecified:9:18 value=(@string/app_name)
定义的@string/app_name
值与主应用程序中的值不同。因此,如果不需要,则将其删除 - 只需从库文件的android:label="@string/app_name"
文件中删除AndroidManifest.xml
。
several special attribute markers(在工具名称空间中)可用于表达如何解决冲突的具体决策。
在这种情况下,要显式地使主应用程序的android:label
覆盖任何其他(例如库文件)应用程序标签,请将xmlns:tools="http://schemas.android.com/tools"
定义添加到<manifest>
节点,并{{ 1}}到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
。
答案 2 :(得分:4)
如果你像我一样幸运,你可以通过hacky解决方法手动解决问题。
AAR文件只是扩展名为.aar的.zip文件。在我的情况下,我解压缩了.aar,从图书馆的android:label
中删除了有问题的AndroidManifest.xml
,然后重新归档了.aar扩展名的剩余文件,所有内容似乎都与新的.aar。
仅供参考,this appears to be a known bug in the android gradle plugin。
答案 3 :(得分:3)
我修复了同样的问题。我的解决方案:
xmlns:tools="http://schemas.android.com/tools"
行
tools:replace=..
android:label=...
答案 4 :(得分:0)
我也面临同样的问题,经过大量研究后发现了灵魂
- 您的min sdk版本应与您使用的模块相同 例如:你的模块min sdk版本是14,你的app min sdk版本是9 应该是一样的。
- 如果您的应用和模块的构建版本不相同。再次它应该相同
醇>
简而言之,您的app build.gradle文件和清单应具有相同的配置
- 在清单文件中两次添加相同权限没有重复,相同的活动提及两次
- 如果您删除了项目中的任何活动,请将其从清单文件中删除
- 有时它是清单文件的标签,图标等标签 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>
通过考虑这些要点,你将摆脱这个明显合并失败的问题 查看我的帖子:此问题是由于Manifest文件或build.gradle文件中的问题引起的。你可以查看我的帖子 https://wordpress.com/post/dhingrakimmi.wordpress.com/23
答案 5 :(得分:0)
我刚刚删除
android:label="@string/app_name
从manifest file
开始,它起作用了!
答案 6 :(得分:0)
我修改了清单文件
<?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
被父应用程序中的标签所代替。