0

您好,我正在开发 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"' 是正确的,还是可能是错误?

4

3 回答 3

1

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

根据文档

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

The manifest merger tool combines all XML elements from each file by following some merge heuristics and by obeying merge preferences that you have defined with special XML attributes. This page describes how manifest merging works and how you can apply merge preferences to resolve merge conflicts.


tools:replace="attr, ..."

Replace the specified attributes in the lower-priority manifest with those from this manifest. In other words, always keep the higher-priority manifest's values.

于 2019-07-10T09:32:14.550 回答
0

In AndroidMainifest.xml Add 2 line

android:name=".Application"
tools:replace="android:name"
于 2020-03-04T09:22:44.483 回答
0

I solved this problem by adding

tools:replace="name"

below my application name in manifest file

于 2021-10-14T17:03:45.593 回答