如何在Gradle构建脚本(Android)中定义和使用常量?
我正在开发一个Android应用程序,其构建系统是Gradle 我的目标是使用一个值(包名)作为如何在Gradle构建脚本(Android)中定义和使用常量?,android,groovy,gradle,build,android-productflavors,Android,Groovy,Gradle,Build,Android Productflavors,我正在开发一个Android应用程序,其构建系统是Gradle 我的目标是使用一个值(包名)作为应用程序ID: productFlavors { orange { applicationId "com.fruits.android.orange" // ... 还可以通过BuildConfig公开它,以便Java代码可以访问它 此访问必须来自flavor之外(即,应用程序的免费版本需要知道付费版本的软件包名称,以便能够提示用户在Play store中升级) 所以我
应用程序ID
:
productFlavors {
orange {
applicationId "com.fruits.android.orange"
// ...
还可以通过BuildConfig
公开它,以便Java代码可以访问它
此访问必须来自flavor之外(即,应用程序的免费版本需要知道付费版本的软件包名称,以便能够提示用户在Play store中升级)
所以我想这样做:
productFlavors {
orange {
applicationId orangeProPackage
// ...
buildConfigField 'String', 'ORANGE_PRO_PACKAGE', "$orangeProPackage" // ?
只是我不确定如何定义orangeProPackage
,以便它在整个build.gradle中可见,并且不会破坏脚本
由于有几种不同的口味,如果我能以某种方式将所有这些常量分组,那将是最好的(我想是吧?)
然后以清晰和描述性的方式引用它们,如proPackages.orange
等
问题是,如何做到这一点
这不是一个复制品
我已经看到了这个问题(以及其他一些问题)。我知道如何声明buildConfigFields,我已经有很多了。我的问题是如何重用与buildConfigField
和applicationId
相同的值
只是我不知道如何定义orangeProPackage,使其在整个build.gradle中可见,并且不会破坏脚本
您可以将其放入项目根目录中的gradle.properties
。与其他.properties
文件一样,它只是一个键值存储:
ORANGE_PRO_PACKAGE=com.morawski.awesomeapp
然后,在build.gradle
中,将其作为一个简单的全局字符串变量(ORANGE\u PRO\u PACKAGE
)引用:
buildConfigField 'String', 'ORANGE_PRO_PACKAGE', '"' + ORANGE_PRO_PACKAGE + '"'
如果我能以某种方式将所有这些常量分组,那将是最好的
任何涉及
.properties
文件的内容都无法处理该问题。在这里,您可能会看到在顶级build.gradle
文件中仅在普通Groovy代码或其他文件中定义globals。可能重复@Maloubobobola它不是重复的。我已经看到了这个问题(以及其他一些问题)。我知道如何声明buildConfigFields,我已经有很多了。我的问题是重用与buildConfigField
和applicationId
相同的值。实际上,它应该是buildConfigField'String'、'ORANGE\u PRO\u PACKAGE'、'“'+ORANGE\u PRO\u PACKAGE+'”
,否则该值不会在BuildConfig中作为字符串文本生成,生成中断。除此之外,它还能工作,谢谢你的提示。是否可以为每种口味使用不同的.properties
文件?这样做的一个优点是,可以在不同的口味中保留相同的键(在gradle.properties中)。由于文件会发生更改,因此根据味道,这些键的值会有所不同。如果使用相同的gradle.properties
文件来处理一个值随味道变化的字符串,我们需要在相同的.properties
文件中使用不同的键,随着时间的推移,这些键很难维护。@ShobhitPuri:“是否可以为每个味道使用不同的.properties文件?”“那家伙没有什么自动的。但Gradle是Groovy,所以您可以从开发机器中读取构建脚本中需要的任何文件。
buildConfigField 'String', 'ORANGE_PRO_PACKAGE', '"' + ORANGE_PRO_PACKAGE + '"'