学新通技术网

【Gradle 学习】(八)- buildConfigField 自定义常量

juejin 7 1
【Gradle 学习】(八)- buildConfigField 自定义常量

前言

今天继续 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 配置动态替换。

本文出至:学新通技术网

标签: