对于代码中的log,可以用BuildConfig中的变量来控制输出。
buildTypes
{release
{buildConfigField "boolean", "LOG_DEBUG", "false"
proguardFiles getDefaultProguardFile('proguard-android.txt'),
'proguard-rules.pro'signingConfig signingConfigs.release}
debug
{
buildConfigField "boolean", "LOG_DEBUG", "true"
}
}
编译时,在生成的BuildConfig.java文件中,会存在LOG_DEBUG变量
LOG_DEBUG为总开关,代码中打log要这么写
if(BuildConfig.LOG_DEBUG)
{
log.d(xxxxx);
}
编译器如果发现LOG_DEBUG为true,在编译时根本不会把log.d(xxxx)编译进去。
在某个功能模块,如果存在频繁打印的log,可以再定义一个开关
private static final boolean DEV_LOG = BuildConfig.LOG_DEBUG && false;
如果功能没问题,这个开关是关闭的。一旦功能出了问题,我们再手动改成BuildConfig.LOG_DEBUG && true; 打开这个开关进行定位。
总结一下,存在两级log开关:
1 总开关:
根据版本类型来控制,
2 模块开关
为防止某些频繁打印的log影响性能,单独在模块内再用一个开关来控制log输出