是否可以在Gradle中声明一个可用于Java的变量?基本上我想在build.gradle中声明一些变量,然后在构建时获取它(显然) . 就像C / C中的预处理器宏一样......
宣言的一个例子就是那样......:
android {
debug {
A_VAR_RETRIEVABLE_IN_JAVA = 42
}
release {
A_VAR_RETRIEVABLE_IN_JAVA = 42+52
}
}
有没有办法做那样的事情?
7 回答
rciovati的答案是完全正确的我只是想再添加一个小工具,你也可以在build.gradle的默认配置部分为每个构建类型创建变量 . 这看起来像这样:
这将允许您访问通过
如果你想要一个通用的配置,也只是想记下这个场景 .
使用系统属性的示例,在build.gradle中设置,从Java应用程序中读取(跟随注释中的问题):
基本上,使用
build.gradle
中的test
任务,使用测试任务方法systemProperty
设置在运行时传递的系统属性:以下是示例代码的其余部分(您可以推断,但无论如何都包含在此处):它获取系统属性
MY-VAR1
,在运行时期望设置为VALUE-TEST
:测试用例:如果未设置
MY-VAR
,则测试应该失败:运行(注意:测试正在通过):
我发现棘手的部分实际上是从gradle获取输出...所以,这里配置了日志记录(slf4j logback),日志文件显示结果(或者,运行
gradle --info cleanTest test
;还有一些属性可以获取stdout到控制台,但是,你知道,为什么):如果您注释掉“
systemProperty...
”(其中,顺便说一下,只能在test
任务中使用),那么:为完整起见,这是logback配置(
src/test/resources/logback-test.xml
):文件:
build.gradle
src/main/java/example/HelloWorld.java
src/test/java/example/HelloWorldTest.java
src/test/resources/logback-test.xml
您可以在构建期间通过系统环境变量创建可覆盖的构建配置字段:
在开发时使用Fallback,但是当您在Jenkins或其他工具上运行构建时,可以覆盖变量 .
在你的app build.gradle中:
该变量将以
BuildConfig.SERVER_URL
的形式提供 .生成Java常量
您可以使用
BuildConfig.FOO
访问它们生成Android资源
您可以使用
@string/app_name
或R.string.app_name
以常规方式访问它们我正在使用
它基于Dennis's answer但是从环境变量中获取它 .
我正在使用此代码并且工作得非常好 .
}
在Android应用程序中使用Api App Key的示例(Java和XML)
gradle.properties
的build.gradle
在java代码中的用法
在xml代码中的用法
Link to an example of Api App Key usage in an Android application
Using String Constants Generated by Gradle Build Configurations