我正在开发一个使用 Gradle 作为构建系统的 Android 应用程序。
我的目标是使用一个值(包名)作为 applicationId
:
productFlavors {
orange {
applicationId "com.fruits.android.orange"
// ...
还可以通过 BuildConfig
公开它,以便 Java 代码可以访问它。
这种访问必须来自 flavor 之外(即免费版本的应用需要知道付费版本的包名,以便它可以提示用户在 Play 商店中进行升级)。
所以我想做这样的事情:
productFlavors {
orange {
applicationId orangeProPackage
// ...
buildConfigField 'String', 'ORANGE_PRO_PACKAGE', "$orangeProPackage" // ?
只有我不确定如何定义 orangeProPackage
以便它在整个 build.gradle 中可见并且不会破坏脚本。
由于有几种不同的风格,如果我能以某种方式将所有这些常量像这样分组(我猜?):
def proPackages = [
orange: "..."
apple: "..."
banana: "..."
]
然后以简洁和描述性的方式引用它们,例如 proPackages.orange
等。
问题是,如何做到这一点?
这不是 Is it possible to declare a variable in Gradle usable in Java? 的副本
我已经看到了这个问题(以及其他一些问题)。我知道如何声明 buildConfigFields,我已经有很多了。我的问题是关于 reusing 与 buildConfigField
and applicationId
相同的值。
最佳答案
Only I'm not sure how to define orangeProPackage so that it's visible in the entire build.gradle and doesn't break the script.
您可以将它放在项目根目录的 gradle.properties
中。与其他 .properties
文件一样,它只是一个键值存储:
ORANGE_PRO_PACKAGE=com.morawski.awesomeapp
然后在 build.gradle
中将其称为简单的全局字符串变量 (ORANGE_PRO_PACKAGE
):
buildConfigField 'String', 'ORANGE_PRO_PACKAGE', '"' + ORANGE_PRO_PACKAGE + '"'
it would be best if I could somehow group all these constants
任何涉及 .properties
文件的东西都不会处理。在那里,您可能正在查看在顶级 build.gradle
文件中以普通 Groovy 代码或其他方式定义全局变量。
关于android - 如何在 Gradle 构建脚本(Android)中定义和使用常量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33346918/