持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第22天,点击查看活动详情
今天继续 Gradle 学习,看看 defaultConfig 中怎么自定义属性的
在应用编译过程中我们经常会用到 BuildConfig.DEBUG 或者 BuildConfig.RELEASE 来区分开发还是正式环境。
public final class BuildConfig {
public static final boolean DEBUG = Boolean.parseBoolean("true");
public static final String BUILD_TYPE = "debug";
}
BuildConfig.java 是 Android Gradle 自动生成的一个 java 类文件,无法手动编译,但是可以通过 Gradle 控制,也就是说这里是动态可配置的。在 defaultConfig{} 中使用 buildConfigField 为 BuildConfig 配置自定义属性。
defaultConfig{} 中使用 buildConfigField 格式为:
defaultConfig {
buildConfigField "数据类型", "常量名", "常量值"
}
- 数据类型,是定义的常量值是个什么类型,和 Java 的类型是对等的,比如 String,Int。
- 常量名,就是定义的常量名
- 常量值,如此定义之后,就会在 BuildConfig.java 中生成对应的常量
使用 buildConfigField 之后,会在相应的 module 下的 build/generated/source/buildConfig/构建变种名(buildType + buildFlavor)/包名/BuildConfig 文件内生成相应的属性。
看个🌰 : 这里以生产环境和测试环境为例来说明该功能的使用。
我们在开发 App 的时候免不了要和服务器进行通信,服务器一般都有生产和测试环境,当我们处理开发和测试的时候使用测试环境进行调试,正式发布的时候使用生成环境。使用 buildConfigField 定义常量,并指定不同环境使用不同的值。
android {
defaultConfig {
buildConfigField'String','API_SERVER_URL','"http://test.cn/"'
}
productFlavors {
google{
buildConfigField 'String','API_SERVER_URL','"http://release.cn/"'
}
baidu{
buildConfigField 'String','API_SERVER_URL','"http://release.cn/"'
}
}
}
这里使用 buildConfigField 定义了一个名为 API_SERVER_URL
的 String 类型常量。在对应的 sourceSet 的 BuildConfig.java 中会生成一个常量名为 API_SERVER_URL
的常量定义。默认配置的生成是:
public final static String API_SERVER_URL = "http://test.cn/"
当构建 baidu 和 google 渠道的时候生成的就是 release.cn/ 了。这个常量可以在我们编码中引用。在我们进行打包的时候会根据 Gradle 配置动态替换。