gpt4 book ai didi

android - Gradle:Android Studio BuildType 资源继承

转载 作者:行者123 更新时间:2023-12-03 03:17:20 31 4
gpt4 key购买 nike

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

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

例如,假设我有以下 buildTypes:

  • 发布
  • 调试
  • 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 和生产构建,我需要定义如下内容:
  • 开发调试
  • debRelease
  • qa调试
  • qa发布
  • 产品调试
  • 产品发布

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

    另一种选择是将 API key 定义为 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 两次。

    Here是安卓文档。

    关于android - Gradle:Android Studio BuildType 资源继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59569553/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com