Android使用BuildConfig控制Debug/Rele
BuildConfig相关介绍
Android Studio编译多module工程时,会在各module的build/generated/source/buildConfig/{flavor}/{buildType} 目录下生成BuildConfig.java文件。如果module中未定义productFlavors,则生成的BuildConfig位于<module>/build/generated/source/buildConfig/{buildType}目录下。
BuildConfig.java中的DEBUG字段,它的值随着buildType的值变动。一般情况下,debug编译时DEBUG的值为true, release编译时DEBUG的值为false。这就启发我们,可以利用BuildConfig.java中的DEBUG字段来作为日志的开关。
if (BuildConfig.DEBUG){
//log print
}
存在问题
由于Gradle的问题,目前Library模块的构建只能以release模式构建,这导致Library模块中BuildConfig.DEBUG的值一直为false。
参考:https://code.google.com/p/android/issues/detail?id=52962
解决方案
目前针对上述问题,已经有了一个较优的解决方案。
总结来说,分为以下步骤:
1、在library模块的build.gradle中添加如下配置
android {
......
productFlavors {
create('flavor1') {
}
}
publishNonDefault true
configurations {
flavor1Debug
flavor1Release
}
//可不配置productFlavors,此时的configurations配置如下
// configurations {
// debug
// release
// }
}
2、在app模块的build.gradle中添加如下配置
dependencies {
......
debugCompile project(path: ':commonmodule', configuration: 'flavor1Debug')
releaseCompile project(path: ':commonmodule', configuration: 'flavor1Release')
//注意,configuration中传入的值必须和library模块的BuildVariants中一样。falvors+buildType其中buildType首字母大写。
//library模块未设置productFlavors时的配置
// debugCompile project(path: ':commonmodule', configuration: 'debug')
// releaseCompile project(path: ':commonmodule', configuration: 'release')
}
3、选择app不同的BuildVariants进行构建,library模块的会BuildVariants相应变化
g参考文档:
Android: 使用BuildConfig.DEBUG优化你的Log输出 & 开启混淆(proguard)的优化配置
Android中使用BuildConfig.DEBUG必须知道的内幕
gradle插件说明Library Publication章节