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

我正在使用Gradle作为构build系统的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等清晰描述的方式引用它们。

问题是,如何做到这一点?

这是不是重复的是否有可能在Gradle中声明一个可用于Java的variables?

我已经看到了这个问题(和其他一些问题)。 我知道如何声明buildConfigFields,我已经有很多了。 我的问题是关于重用buildConfigField applicationId相同的值。

Solutions Collecting From Web of "如何在Gradle构build脚本(Android)中定义和使用常量?"

只有我不知道如何定义orangeProPackage,以便它在整个build.gradle中可见并且不会中断脚本。

你可以把它放在项目根目录下的gradle.properties中。 和其他.properties文件一样,它只是一个键值存储:

 ORANGE_PRO_PACKAGE=com.morawski.awesomeapp 

然后在build.gradle其称为一个简单的全局stringvariables( ORANGE_PRO_PACKAGE ):

 buildConfigField 'String', 'ORANGE_PRO_PACKAGE', ORANGE_PRO_PACKAGE 

如果我能以某种方式组合所有这些常量,那将是最好的

涉及.properties文件的任何东西都不能处理。 在那里,您可能正在寻找在顶级build.gradle文件中定义纯粹的Groovy代码或全局。