1. BuildConfig 的作用

程序编译成功后,会在每一个 Module 的 build/generated/sources/buildConfig/debug(或 release)/包名 文件夹下生成一个 BuildConfig 类,应用代码通过这个类可以获取跟 Gradle 构建有关的信息。例如通过 BuildConfig.DEBUG 就可以判断当前是否处于 debug 模式,来控制日志输出。并且官方提供了 buildConfigField() 方法,将自定义字段添加到 Gradle 构建配置文件的 BuildConfig 类中,神策 Android SDK 中正是采用这种方式去配置 SDK 版本号。

2. 拓展使用

神策 Android SDK 使用需要传入数据接收地址,而神策分析一般会有两个项目:测试项目( default )和正式项目( production ),它们就会对应两个数据接收地址。我们需要在 debug 的时候往测试项目发送数据,release 的时候往正式项目发送数据,此时我们可以通过 BuildConfig 配置一个跟随 Build 类型变化而变化的数据接收地址。

// build.gradle
...
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        buildConfigField("String""SERVER_URL""\"https://www.xxx.datasink.com/sa?project=production\"")
    }
    debug {
        buildConfigField("String""SERVER_URL""\"https://www.xxx.datasink.com/sa?project=default\"")
    }
}
...

Build 后 BuildConfig 就会自动生成 SERVER_URL 这个字符串常量,我们初始化只需要传入 BuildConfig.SERVER_URL 即可。

每日一问的答案中可能无法全完解读这个问题,如果您是相关技术专家或者是对本问题有自己的见解,欢迎带着「批判性」的态度阅读,指正其中的不足。