你好,我正在开发两个模块A和B,B依赖于A。
最后两个有一个Application类,用于获取上下文统计。
在这两个模块中,它们是显式的。
模块A清单:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="apps.com.a">
<application android:name=".AA"/>
</manifest>
模块B清单:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="apps.com.b">
<application
android:name=".BApp">
</application>
</manifest>
当我尝试执行Junit时,会得到以下错误:
Manifest merger failed : Attribute application@name value=(apps.b.BApp) from [__tested_artifact__::blibrary] AndroidManifest.xml:14:18-72
is also present at [:alibrary] AndroidManifest.xml:11:18-78 value=(apps.com.a.AApplication).
Suggestion: add 'tools:replace="android:name"' to <application> element at manifestMerger2718201306699938665.xml:7:5-9:19 to override.
想知道如何解决这个问题,我会把‘tools:replace=’android:name‘是正确的,还是可能是错误?
发布于 2019-07-10 09:32:14
是的,您可以使用tools:replace="android:name"
解决这个问题。
根据文档
您的APK文件可以只包含一个AndroidManifest.xml文件,但是您的Android项目可能包含由主源集、构建变体和导入的库提供的几个文件。因此,在构建应用程序时,Gradle build将所有清单文件合并到一个打包到APK中的清单文件中。 清单合并工具结合了每个文件中的所有XML元素,方法是遵循某些合并试探法,并遵循用特殊XML属性定义的合并首选项。此页面描述清单合并如何工作,以及如何应用合并首选项来解决合并冲突。
tools:replace="attr, ..."
将低优先级清单中的指定属性替换为此清单中的属性。换句话说,始终保留高优先级清单的值。
发布于 2020-03-04 09:22:44
在AndroidMainifest.xml中添加2行
android:name=".Application"
tools:replace="android:name"
发布于 2021-10-14 17:03:45
我通过添加
tools:replace="name"
在清单文件中的应用程序名称下面
https://stackoverflow.com/questions/56967514
复制相似问题