如何为运行测试设置不同的AndroidManifest.xml

4

我有一个带有最简单清单的库

<manifest package="com.xxx.xxx.android" />

但是这个库需要从Android清单中获取两个元数据值才能正常工作,因此为了运行我的测试,我添加了以下代码到src/test/AndroidManifest.xml

<manifest package="com.xxx.xxx.android"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <application>
        <meta-data
            android:name="var1"
            android:value="value1"/>
        <meta-data
            android:name="var2"
            android:value="value2"/>
    </application>
</manifest>

根据我从文档中阅读到的内容,我需要在gradle中设置新的AndroidManifest.xml路径。我正在尝试这样做:

android {
    ...
    buildTypes {
        debug {
            testCoverageEnabled true
        }

        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    sourceSets {
        String sharedTestDir = 'src/sharedTest/java'
        String testManifest = 'src/test/AndroidManifest.xml'
        test {
            java.srcDir sharedTestDir
            manifest.srcFile testManifest
        }
        androidTest {
            java.srcDir sharedTestDir
            manifest.srcFile testManifest
        }
    }

    testOptions.unitTests.includeAndroidResources true
}

但是它并不起作用,我无法在测试中获取元数据。只有当我为main设置manifest.srcFile而不是test和/或androidTest时才有效。

1个回答

5
尝试将src/debug/AndroidManifest.xmltestBuildType "debug"相结合。

如果我这样做,它可以工作,但是当我尝试使用关于“清单合并失败”的库编译示例时,我开始出现错误。我需要在清单中添加更多内容吗? - Victor Laerte
@VictorLaerte 这应该是基于两个备用的 AndroidManifest.xml 正常工作的,但我只能想象,在 build.gradle 中更改路径可能会破坏默认行为。是否有更详细的错误消息,说明为什么合并失败? - Martin Zeitler
1
LibManifest.xml 没有 application 标签 - 而 SampleManifest.xml 也没有打开 application 标签... 这可能解释了 Manifest merger failed with multiple errors,请参见 https://developer.android.com/studio/build/manifest-merge - Martin Zeitler
按照您告诉我的方法,查看文档后发现应该合并应用程序标签。现在它们都有<application>,但仍然没有合并,您能看出我还做错了什么吗? :/ - Victor Laerte
正如你所说的,在文档中查找并添加 tools:replace="android:value" 在我的示例中有效。将此添加到原始答案可能会有所帮助。这个链接也非常有用 https://dev59.com/n1sV5IYBdhLWcg3wuxCM#42023614 - Victor Laerte
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接