BuildConfig.DEBUG的值

今天在做项目的时候遇到一个很奇怪的问题:项目中子模块的BuildConfig 的值永远都是release模式下的值,在debug的时候,依然是这样.在我的项目中有这样一段代码

public int getPriority() {
    int priority = Log.VERBOSE;
    if (!BuildConfig.DEBUG) {
        priority = Log.INFO;
    }
    return priority;
}

这段代码用来控制日志的的输出级别,如果在debug的模式下,应该是输出所有的log,如果是在release的模式下,应该是输出INFO级别的log,但是在实际中发现,即使是debug下,BuildConfig.Debug的值永远都是false.

这是因为在gradle构建的过程当中,子模块的模式永远都是release模式,但是这个可以通过我们在gradle的配置中去更改。详细的gralde教程请看这里

下面说一下项目中解决办法
在我的项目中,依赖层级是这样的 app > lib_stub > lib_sdk ,因此在配置的时候三个模块的配置文件都需要修改

说明如下,app依赖lib_stub 那么需要在 dependencies 当中添加两种依赖,一种是release,一种是debug。
同时在lib_stub的defaultConfig当中添加两个配置项,defaultPublishConfig 和publishNonDefault(具体的含义在上面的提及的文档里面有详细的说面)
lib_stub 在依赖lib_sdk的时候同样需要添加两种依赖,并且在lib_sdk的defaultConfig中添加同样的配置。

主要的修改部分如下
build.gralde(app)

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile rootProject.ext.dependencies["junit"]
    debugCompile project(path:':lib_stub', configuration: "debug")
    releaseCompile project(path:':lib_stub', configuration: "release")
}

build.gradle(lib_stub)

android {
compileSdkVersion rootProject.ext.android["compileSdkVersion"]
buildToolsVersion rootProject.ext.android["buildToolsVersion"]

defaultConfig {
    minSdkVersion rootProject.ext.android["minSdkVersion"]
    targetSdkVersion rootProject.ext.android["targetSdkVersion"]
    versionCode rootProject.ext.android["versionCode"]
    versionName rootProject.ext.android["versionName"]
    defaultPublishConfig  "release"
    publishNonDefault true
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    testCompile rootProject.ext.dependencies["junit"]
    debugCompile project(path:':lib_sdk', configuration: "debug")
    releaseCompile project(path:':lib_sdk', configuration: "release")
    }

build.gralde(lib_sdk)

android {
compileSdkVersion rootProject.ext.android["compileSdkVersion"]
buildToolsVersion rootProject.ext.android["buildToolsVersion"]

defaultConfig {
    minSdkVersion rootProject.ext.android["minSdkVersion"]
    targetSdkVersion rootProject.ext.android["targetSdkVersion"]
    versionCode rootProject.ext.android["versionCode"]
    versionName rootProject.ext.android["versionName"]
    defaultPublishConfig  "release"
    publishNonDefault true
    }
}

这样修改完成之后,就可以正确的使用BuildConfig.DEBUG 的值了。