【问题标题】:Change manifestPlaceholders in androidTest manifest更改 androidTest 清单中的 manifestPlaceholders
【发布时间】:2018-02-19 12:18:10
【问题描述】:

我有服务的清单占位符:

<service
        android:name=".MyService"
        android:process="${processName}">

在我的 build.gradle 中我替换了它。

android {  
    defaultConfig {
        manifestPlaceholders = [
                processName: ':Proc'
        ]
    }
}

但对于我的浓缩咖啡测试 (androidTest),我需要 processName 中的空值。我该怎么做?

我曾尝试使用 buildTypes 执行此操作,但它不起作用(BuildType 名称不能以“androidTest”开头)

【问题讨论】:

  • 你最后是怎么做到的?
  • 查看接受的答案@AntonShkurenko
  • 嗯,对我没用 :( 不过谢谢

标签: android android-espresso


【解决方案1】:

这个例子适用于我的 Gradle 插件 3.4.1:

android {
    unitTestVariants.all {
        it.mergedFlavor.manifestPlaceholders += [
                placeHolderName: "placeHolderValue"
        ]

        it.mergedFlavor.addResValue(new ClassFieldImpl("string", "resValueName", "resValueValue"))
    }
}

【讨论】:

  • 即使使用 testVariants 而不是 unitTestVariants 也不适用于 androidTest
  • 同样,这不适用于我的 espresso 设置
【解决方案2】:

我认为这里最好的方法是编写第二个AndroidManifest 仅用于您的仪器测试,正如documentation 所建议的那样

../app/src/androidTest/AndroidManifest.xml

<service
   android:name=".MyService"
   android:process="">

【讨论】:

  • 它不起作用:(在合并清单中有来自主清单的服务,没有被覆盖
  • 您必须考虑生成了 两个 APK,一个用于您的应用,另一个用于测试。检查用于测试的那个,看看服务是否被覆盖。如果您仍然遇到问题,请尝试查看this question
【解决方案3】:

简单地添加清单并没有帮助,因为您需要为其提供合并策略,只需使用:

 <service
   android:name=".MyService"
   android:process="" 
   tools:node="replace">

比在合并清单中你应该得到正确的值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-18
    • 1970-01-01
    • 1970-01-01
    • 2019-10-01
    • 2013-10-21
    • 2019-10-12
    • 1970-01-01
    相关资源
    最近更新 更多