今天在做项目的时候遇到一个很奇怪的问题:项目中子模块的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 的值了。