Gradle依赖项目无法自动更新BuildVariant

问题描述:
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来决定的变量,对此有两种解决办法:

  1. 将子项目配置加入,defaultPublishConfig= debug,这个也很好理解,就是说,这个lib默认发布build type为debug,这样是可以解决问题,然而存在一个问题就是,当切到release版本的时候,那么还是得手动去切换一下,所以不是最优解决方案
  2. Google论坛里面,有人给出了一种方案,并且经过尝试可行:


    Gradle依赖项目无法自动更新BuildVariant_第1张图片
    论坛截图

总结一下就是,在任何子项目需要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包

你可能感兴趣的:(Gradle依赖项目无法自动更新BuildVariant)