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

标签 android groovy gradle build android-productflavors

我正在开发一个使用 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,我已经有很多了。我的问题是关于 reusingbuildConfigField 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/

相关文章:

javascript - PhoneGap 相机在构建后无法工作 - Android

Android MVP - 在 headless fragment 中保留演示者时如何确保 View 在配置更改期间得到更新?

Groovy XmlSlurper 获取没有子节点的节点的值

Groovy 将对象列表转换为逗号分隔的字符串

java - 使用 gradle 复制任务从所有依赖项复制 META-INF

android - 打开/proc/<PID>/stat 文件时权限被拒绝错误

android - 我可以将嵌套的 FloatingActionButton 锚定到视口(viewport)吗?

groovy - 如何使用 Groovy 脚本检查 URL 是否存在或返回 404?

android-studio - 安卓工作室 : Gradle sync failed: Unable to load class

java - 带参数的 @Immutable 类的构造函数无法从 .java 类访问