为特定口味修改 build.gradle

Modifying build.gradle for a particular flavor

我正在修改 build.gradle,其中包含针对单一口味的特定代码。具体来说,我在内部修改这个周期

 project.android.applicationVariants.all { variant ->

最佳做法是将 johndoe 风格的自定义代码包装在

if (variant.flavorName.toLowerCase().contains("johndoe")) {

...或者这个解决方案有一些缺点?

不是 Android 开发人员,但这基本上是其他大型 Gradle 项目为配置特定 subprojects(您的情况下的变体)所做的工作。示例:

除非您注意到您的构建因执行上述操作而变慢,否则没问题。

您还可以使用构建扫描来更深入地了解您的 Gradle 配置:https://guides.gradle.org/creating-build-scans/

简而言之,是的。 Android Documentation 建议在存在多个风味维度和构建类型组合时将其用于特定于变体的自定义,例如在他们的示例中,为不同的 abi 变体设置不同的版本代码。它可以很容易地用于做你建议的事情。

需要注意的一件事是 "custom code" 正在做什么。自定义代码可能正在配置构建,或者想要在构建过程中添加额外的步骤,甚至两者兼而有之!如果它与配置相关,那么 "custom code" 应该类似于上面的示例。但是,如果它想添加额外的处理或构建逻辑,那么应该以 Gradle Task 的形式完成,如下所示:

....
applicationVariants.all { variant ->
    if (variant.buildType.name == "release") {
        task("customReleaseLogic") {
            description = "Runs some custom release logic"
            // run some custom release logic 
        }
        variant.assemble.dependsOn("customReleaseLogic")
    }
}
....

这样,Gradle 构建将知道在构建项目时需要完成一个额外的步骤。