如何在 Gradle 构建脚本 (Android) 中定义和使用常量?
How to define and use a constant in Gradle build script (Android)?
我正在使用 Gradle 作为构建系统开发 Android 应用程序。
我的objective是使用一个值(包名)作为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,我已经有很多了。我的问题是关于 重用 与 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 代码或其他方式定义全局变量。
您可以使用这样的扩展程序:
// Top-level 构建文件,您可以在其中添加所有 sub-projects/modules.
通用的配置选项
构建脚本{
ext.kotlin_version = '1.6.10'
ext.app_version_code = 1010
ext.app_version_name = '1.0.1.0'
}
我正在使用 Gradle 作为构建系统开发 Android 应用程序。
我的objective是使用一个值(包名)作为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,我已经有很多了。我的问题是关于 重用 与 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 代码或其他方式定义全局变量。
您可以使用这样的扩展程序:
// Top-level 构建文件,您可以在其中添加所有 sub-projects/modules.
通用的配置选项构建脚本{
ext.kotlin_version = '1.6.10'
ext.app_version_code = 1010
ext.app_version_name = '1.0.1.0'
}