groovy 如何在Gradle构建脚本中定义和使用常量(Android)?

8i9zcol2  于 2022-11-01  发布在  Android
关注(0)|答案(2)|浏览(130)

我正在使用Gradle作为构建系统开发Android应用程序。
我的目标是使用一个值(一个包名)作为applicationId

productFlavors {
   orange {
      applicationId "com.fruits.android.orange"
      // ...

而且还通过BuildConfig公开它,以便Java代码可以访问它。
这种访问必须来自风格之外(即,免费版本的应用程序需要知道付费版本的包名称,以便它可以提示用户在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 * 和 * applicationId

piok6c0g

piok6c0g1#

只是我不知道如何定义orangeProPackage,使其在整个build.gradle中可见,并且不破坏脚本。
你可以把它放在项目根目录的gradle.properties中,和其他的.properties文件一样,它只是一个键值存储:

ORANGE_PRO_PACKAGE=com.morawski.awesomeapp

然后在build.gradle中将其作为一个简单的全局字符串变量(ORANGE_PRO_PACKAGE)引用:

buildConfigField 'String', 'ORANGE_PRO_PACKAGE', '"' + ORANGE_PRO_PACKAGE + '"'

如果我能把这些常数组合起来
任何涉及.properties文件的内容都不能处理这个问题。在这里,您可能需要在顶层build.gradle文件中定义全局变量,而只是使用普通的Groovy代码或其他代码。

pjngdqdw

pjngdqdw2#

您可以使用如下扩展名:
//顶级生成文件,您可以在其中添加所有子项目/模块通用配置选项

buildscript {

    ext.kotlin_version = '1.6.10'

    ext.app_version_code = 1010

    ext.app_version_name = '1.0.1.0'

}

相关问题