Android build.gradle 从另一个文件导入风味

Android build.gradle importing flavors from another file

我已将产品口味放入另一个名为 other.gradle 的文件中,它看起来像这样:

project.ext.myflavors =  {
 mock {
     applicationId "com.mysite.mock"
 }

}

并且我能够像这样成功访问我的 build.gradle 文件中的闭包:

myflavors()

但我收到一个错误消息,提示未定义模拟方法。

Error:Gradle DSL method not found: 'mock()'

有没有办法只从另一个文件定义代码并将代码本身导入构建文件?或者我如何从另一个文件导入口味?

多次访问productFlavors完全没问题。因此,在您的构建脚本包含的脚本中添加一些或所有风格将起作用。

创建一个 Gradle 脚本,其中包含决定应添加哪种口味的逻辑:

if (someCondition()) {
    android {
        productFlavors {
            one {
                applicationId = 'com.example.oneapp'
            }
        }
    }
} else {
    android {
        productFlavors {
            two {
                applicationId = 'com.example.twoapp'
            }
        }
    }
}

现在从您的构建脚本中包含此脚本。如果将脚本放在根项目(的子文件夹)下,则重用脚本很容易。例如:

apply from: rootProject.file('build-scripts/flavor-picker.gradle')

请注意,您的 IDE 可能不会注意到口味选择脚本或 gradle.properties 的更改,因此如果您对其进行更改,您可能需要手动重新导入 Gradle 文件查看正确的可用任务集。

构建风格可以在单独的文件 (build_flavors.gradle) 中定义,如下所示:

android {
    productFlavors {
        flavorA {
            // ...
        }
        flavorB {
            // ...
        }
    }
}

然后导入到build.gradle:

apply plugin: 'com.android.application'
apply from: './build_flavors.gradle'

android {
    // the rest of your android configuration
}