Android使用BuildConfig控制Debug/Release日志输出

BuildConfig相关介绍

Android Studio编译多module工程时,会在各module的build/generated/source/buildConfig/{flavor}/{buildType} 目录下生成BuildConfig.java文件。如果module中未定义productFlavors,则生成的BuildConfig位于/build/generated/source/buildConfig/{buildType}目录下。

Android使用BuildConfig控制Debug/Release日志输出_第1张图片

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

解决方案

目前针对上述问题,已经有了一个较优的解决方案。

Android使用BuildConfig控制Debug/Release日志输出_第2张图片

总结来说,分为以下步骤:
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相应变化

Android使用BuildConfig控制Debug/Release日志输出_第3张图片
g

参考文档:
Android: 使用BuildConfig.DEBUG优化你的Log输出 & 开启混淆(proguard)的优化配置
Android中使用BuildConfig.DEBUG必须知道的内幕
gradle插件说明Library Publication章节

你可能感兴趣的:(Android使用BuildConfig控制Debug/Release日志输出)