错误:属性application @ name太存在

时间:2019-07-10 09:22:59

标签: android android-manifest android-module

你好,我正在开发2个模块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”'正确,否则会出错吗?

2 个答案:

答案 0 :(得分:1)

是的,您可以使用tools:replace="android:name"解决此问题

根据docs

  

您的APK文件只能包含一个AndroidManifest.xml文件,但您的Android Studio项目可能包含多个文件-由主要的源集,构建变体和导入的库提供。因此,在构建应用程序时,Gradle构建会将所有清单文件合并到一个打包到APK中的清单文件中。

     

清单合并工具通过遵循一些合并试探法并遵循您使用特殊XML属性定义的合并首选项来合并每个文件中的所有XML元素。该页面描述清单合并的工作方式以及如何应用合并首选项来解决合并冲突。


  

tools:replace="attr, ..."

     

将优先级较低的清单中的指定属性替换为该清单中的属性。换句话说,请始终保留优先级较高的清单的值。

答案 1 :(得分:0)

在AndroidMainifest.xml中 加2行

android:name=".Application"
tools:replace="android:name"