是否可以使用Gradle将AndroidManifest添加到特定的buildType(而不是产品风味)?

kco*_*ock 2 android android-manifest android-gradle-plugin

我们正在努力设置一些活动检测测试以在构建服务器上运行。由于这需要唤醒设备,因此我发现的选项似乎是:

  1. 将设备设置为“保持清醒”并禁用屏幕锁定

  2. 在测试情况下编程禁用键盘锁(如所描述的在这里

选项1看起来不太好,因为它浪费了电池,最终会导致设备显示屏上的烙印。选项2似乎更可取,但我宁愿严格保留DISABLE_KEYGUARD权限来调试内部版本(而不是发行版),以便所有产品类型都可以测试,但是永远不要为发行版本请求此权限。

我知道我们可以添加清单以使用合并sourceSets

android.sourceSets.development {
    manifest.srcFile 'development/AndroidManifest.xml'
}
Run Code Online (Sandbox Code Playgroud)

但是我还没有找到仅对特定构建类型执行此操作的等效方法-像这样(无效):

buildTypes {
    debug {
         manifest.srcFile 'debug/AndroidManifest.xml'
    }
}
Run Code Online (Sandbox Code Playgroud)

有官方的方法吗?还有其他建议吗?谢谢!

Sco*_*rta 5

您可以使用与口味相同的方法来使用构建类型的sourceSets。这应该工作:

android.sourceSets.debug {
    manifest.srcFile 'debug/AndroidManifest.xml'
}
Run Code Online (Sandbox Code Playgroud)

话虽如此,目录结构意味着除非您使用非默认布局,否则无需手动配置sourceSets。在标准结构中,您可以执行此操作,而根本不在构建文件中配置sourceSets:

module_directory
+--src
   +--main
      +--AndroidManifest.xml
      +--java
      +--res
   +--flavor1
      +--AndroidManifest.xml
      +--java
      +--res
   +--debug
      +--AndroidManifest.xml
      +--java
      +--res
   +--release          
      +--AndroidManifest.xml
      +--java
      +--res
Run Code Online (Sandbox Code Playgroud)

等等