我正在使用具有许多不同库依赖关系并使用新清单合并的gradle项目。在我的<application />
代码中,我将其设置为:
<application tools:replace="android:icon, android:label, android:theme, android:name"
android:name="com.example.myapp.MyApplcation"
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/application_name"
android:logo="@drawable/logo_ab"
android:theme="@style/AppTheme"
>
....
</application>
然而我收到了错误:
/android/MyApp/app/src/main/AndroidManifest.xml:29:9 Error:
Attribute application@icon value=(@drawable/ic_launcher) from AndroidManifest.xml:29:9
is also present at {Library Name} value=(@drawable/app_icon)
Suggestion: add 'tools:replace="android:icon"' to <application> element at AndroidManifest.xml:26:5 to override
/android/MyApp/app/src/main/AndroidManifest.xml:30:9 Error:
Attribute application@label value=(@string/application_name) from AndroidManifest.xml:30:9
is also present at {Library Name} value=(@string/app_name)
Suggestion: add 'tools:replace="android:label"' to <application> element at AndroidManifest.xml:26:5 to override
/android/MyApp/app/src/main/AndroidManifest.xml:27:9 Error:
Attribute application@name value=(com.example.myapp.MyApplication) from AndroidManifest.xml:27:9
is also present at {Another Library}
Suggestion: add 'tools:replace="android:name"' to <application> element at AndroidManifest.xml:26:5 to override
/android/MyApp/app/src/main/AndroidManifest.xml:32:9 Error:
Attribute application@theme value=(@style/AppTheme) from AndroidManifest.xml:32:9
is also present at {Library Name} value=(@style/AppTheme)
Suggestion: add 'tools:replace="android:theme"' to <application> element at AndroidManifest.xml:26:5 to override
答案 0 :(得分:195)
像这样声明你的清单标题
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.yourpackage"
xmlns:tools="http://schemas.android.com/tools">
然后,您可以在应用程序标记中添加以下属性:
<application
tools:replace="icon, label" ../>
例如,我需要替换图标和标签。祝你好运!
答案 1 :(得分:38)
我修复了同样的问题。我的解决方案:
xmlns:tools="http://schemas.android.com/tools"
行
tools:replace=..
android:label=...
示例:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:replace="allowBackup, label"
android:allowBackup="false"
android:label="@string/all_app_name"/>
答案 2 :(得分:36)
尝试重新排序gradle文件中的依赖项。我不得不将有问题的库从列表底部移到顶部,然后才能工作。
答案 3 :(得分:30)
我刚刚经历了与OP所描述的tools:replace=...
相同的行为。
事实证明,清单合并忽略tools:replace
的根本原因是here描述的错误。它基本上意味着如果项目中有一个包含<application ...>
节点包含tools:ignore=...
属性的清单的库,则可能会发生主要清单中的tools:replace=...
属性模块将被忽略。
这里棘手的一点是可以发生,但不必。在我的例子中,我有两个库,库A具有tools:ignore=...
属性,库B具有要在相应清单中替换的属性,以及主模块清单中的tools:replace=...
属性。如果B的清单在A的清单之前合并到主清单中,那么一切都按预期工作。在相反的合并顺序中出现错误。
这些合并发生的顺序似乎有点随机。在我的情况下,更改build.gradle
的依赖项部分中的顺序没有任何效果,但改变了味道的名称。
因此,唯一可靠的解决方法似乎是解压问题导致库,删除tools:ignore=...
标记(这应该没有问题,因为它只是lint的提示)并再次打包库。
投票支持修复错误,原因。
答案 4 :(得分:17)
我的最终工作解决方案(突出显示示例代码中的tages):
xmlns:tools
行
tools:replace
醇>
示例:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="pagination.yoga.com.tamiltv"
**xmlns:tools="http://schemas.android.com/tools"**
>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme"
**tools:replace="android:icon,android:theme"**
>
答案 5 :(得分:12)
对我来说遗失的是:
xmlns:tools="http://schemas.android.com/tools"
例如:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.your.appid">
答案 6 :(得分:7)
您可以替换Manifest应用程序代码中的内容:
<application
tools:replace="android:icon, android:label, android:theme, android:name,android:allowBackup"
android:allowBackup="false"...>
并且适合你。
答案 7 :(得分:4)
固定IT 有真正的错误,只需添加此工具:replace =“android:icon,android:theme”
进入清单中的应用标记, 它运作得很好,
答案 8 :(得分:4)
您可以替换Manifest application
标记中的内容:
<application
...
tools:replace="android:label, android:icon, android:theme"/>
并且适合你。
<强>解释强>
在您的gradle
文件中使用此类依赖项/库,在其Manifest应用程序代码中包含这些标签可能会产生此问题,并在Manifest
中替换它们是解决方案。
答案 9 :(得分:1)
tools:replace="android:supportsRtl,android:allowBackup,icon,label">
答案 10 :(得分:0)
我在导入的项目中收到了类似的错误:
具有相同键的多个条目:android:icon = REPLACE和 工具:图标= REPLACE
在更改应用程序标记中的以下行后修复:
tools:replace="icon, label, theme"
到
tools:replace="android:icon, android:label, android:theme"
答案 11 :(得分:0)
我也经历了这个问题并改变了它:
<application android:debuggable="true" android:icon="@drawable/app_icon" android:label="@string/app_name" android:supportsRtl="true" android:allowBackup="false" android:fullBackupOnly="false" android:theme="@style/UnityThemeSelector">
到
<application tools:replace="android:allowBackup" android:debuggable="true" android:icon="@drawable/app_icon" android:label="@string/app_name" android:supportsRtl="true" android:allowBackup="false" android:fullBackupOnly="false" android:theme="@style/UnityThemeSelector">
答案 12 :(得分:0)
以下骇客作品:
xmlns:tools="http://schemas.android.com/tools"
行添加到
清单标签tools:replace="android:icon,android:theme,android:allowBackup,label"
在应用程序标签中答案 13 :(得分:0)
我的问题是带有基本模块,应用程序模块和功能模块的多模块项目。 每个模块都有自己的AndroidManifest,我为debug和main实现了构建变体。 因此,我们必须确保仅在debug清单和main清单中声明了“ android:name”,并且不要在子模块的Manifest清单中进行设置。 例如: 主要清单:
<application
android:name=".App"/>
调试清单:
<application
tools:replace="android:name"
android:name=".DebugApp"
/>
请勿在其他清单文件中设置“ android:name”:
<application android:name=".App">
只需在这样的功能模块中定义,它就会很好地合并
<application>