我正在使用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
相同的价值。
答案 0 :(得分:21)
只有我不确定如何定义orangeProPackage,以便它在整个build.gradle中可见,并且不会破坏脚本。
您可以将其放在项目根目录中的gradle.properties
中。与其他.properties
文件一样,它只是一个键值存储:
ORANGE_PRO_PACKAGE=com.morawski.awesomeapp
然后在ORANGE_PRO_PACKAGE
中将其称为简单的全局字符串变量(build.gradle
):
buildConfigField 'String', 'ORANGE_PRO_PACKAGE', ORANGE_PRO_PACKAGE
如果我能以某种方式将所有这些常量分组
,那将是最好的
任何涉及.properties
文件的内容都无法处理。在那里,您可能正在考虑使用普通的Groovy代码或其他东西在顶级build.gradle
文件中定义全局变量。