问题描述:
gradle项目里面,主项目修改为debug或者release,但是子项目里面始终是release;举个例子,你自己建立的一个子lib项目,需要一个可配置的内容LOG_DEBUG:
debug {
buildConfigField"boolean","LOG_DEBUG","true"
}
release {
buildConfigField"boolean","LOG_DEBUG","false"
}
但是,将主项目的buildtype改为debug,lib项目里面的BuildConfig.LOG_DEBUG始终为false
在网上Google了一番之后,发现StackOverFlow上的提问 以及 Google 论坛的讨论
在Stackoverflow里面,Android SDK Tech Leader说,这个是他们期望的,因为依赖的lib项目必须是已经发布的版本之后,才能被其他工程或者模块使用。而实际项目中,肯定会有自己建立一个lib,并且自己建立的lib项目里面也有通过buildType来决定的变量,对此有两种解决办法:
- 将子项目配置加入,defaultPublishConfig= debug,这个也很好理解,就是说,这个lib默认发布build type为debug,这样是可以解决问题,然而存在一个问题就是,当切到release版本的时候,那么还是得手动去切换一下,所以不是最优解决方案
-
Google论坛里面,有人给出了一种方案,并且经过尝试可行:
总结一下就是,在任何子项目需要configuration配置的lib项目里面添加一个publishNonDefault true
,然后在依赖的宿主项目添加一个
{
debugCompile project(path: ':libName', configuration: 'debug')
releaseCompile project(path:':libName', configuration: 'release')
},
注意publishNonDefault true必须要添加,不然,会出现configration:
'debug'找不到的问题.
如果出现
Error:Execution
failed for task ':app:processDebugResources'.
>Error: more than one library with package name 'com.xxx.xxx'
请检查项目中的各种依赖关系,有没有重复引入某一个lib包