我正在使用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
。
2条答案
按热度按时间piok6c0g1#
只是我不知道如何定义orangeProPackage,使其在整个build.gradle中可见,并且不破坏脚本。
你可以把它放在项目根目录的
gradle.properties
中,和其他的.properties
文件一样,它只是一个键值存储:然后在
build.gradle
中将其作为一个简单的全局字符串变量(ORANGE_PRO_PACKAGE
)引用:如果我能把这些常数组合起来
任何涉及
.properties
文件的内容都不能处理这个问题。在这里,您可能需要在顶层build.gradle
文件中定义全局变量,而只是使用普通的Groovy代码或其他代码。pjngdqdw2#
您可以使用如下扩展名:
//顶级生成文件,您可以在其中添加所有子项目/模块通用配置选项