Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/211.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Gradle构建脚本(Android)中定义和使用常量?_Android_Groovy_Gradle_Build_Android Productflavors - Fatal编程技术网

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

如何在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中升级) 所以我

我正在开发一个Android应用程序,其构建系统是Gradle

我的目标是使用一个值(包名)作为
应用程序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 + '"'