繁体   English   中英

Gradle:Android Studio BuildType 资源继承

[英]Gradle: Android Studio BuildType Resource Inheritance

默认情况下,所有项目都有一个调试和发布 buildType。 然而,人们通常希望从这些基本构建类型继承,以制作具有微小差异的其他构建类型。 正如我们所知,“initWith”函数允许我们这样做,这会导致所有 Gradle 配置被继承。 问题是它似乎不适用于 Android 资源。

用例是如果您有各种工具的调试与发布密钥(即需要定义为字符串),并且您不想在几个不同的资源目录中复制/粘贴 strings.xml 文件。

例如,假设我有以下 buildType:

  • 释放
  • 调试
  • qa - 使用 initWith 调试

如果我然后创建资源目录:

  • 调试/res/values/strings.xml
  • 发布/res/values/strings.xml

qa buildType 将无法访问调试 strings.xml。 我需要复制粘贴strings.xml:

  • qa/res/values/strings.xml

当然,复制粘贴是一个真正的坏主意,因为需要在每个副本中进行任何更改,迟早会犯错误。 我尝试将“qa”更改为“qaDebug”和“debugQa”,但没有成功。 我可以使用 productFlavors,但最终我会得到比我需要的更多不同的变体,其中许多变体没有任何意义。 例如,要拥有一个仅共享两个基本调试和发布资源目录的 dev、qa 和生产版本,我需要定义如下内容:

  • 开发调试
  • 释放
  • 调试
  • 发布
  • 调试
  • prodRelease

不仅命名是多余的,而且这些构建配置中有一半未使用。 乘以我有几个其他继承的 buildTypes 而不是我在这个简化的例子中提到的事实,你可以看到它很快就失控了。

另一种选择是将 API 密钥定义为 gradle 变量(我目前拥有),但使用标准方法总是更好,因为它最终会更整洁,团队的新开发人员可以更容易地找到东西。 此外还有字符串以外的资源,例如 google-services.json 甚至 XML 文件,它们只能通过资源目录处理。

感谢大家的投入。

您可以使用sourceSets为构建变体指定不同的源集。 在你的情况下,它应该如下:

android {
   ...
   sourceSets {
        yourBuildVariant {
            res.srcDirs = ['app/src/debug/res']
        }
    }
}

现在你的BuildVariant res文件夹是“app/src/debug/res”而不是“app/src/yourBuildVariant/res”。

要检查构建变体及其相关源集的列表,请在右侧的 Android Studio 中单击 Gradle -> app -> Tasks -> android 并单击 sourceSets 两次。

是Android文档。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM