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论坛里面,有人给出了一种方案,并且经过尝试可行:


    论坛截图

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,466评论 25 708
  • 1.介绍 如果你正在查阅build.gradle文件的所有可选项,请点击这里进行查阅:DSL参考 1.1新构建系统...
    Chuckiefan阅读 12,179评论 8 72
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,973评论 19 139
  • 参考 中文官网构建指南:https://developer.android.google.cn/studio/bu...
    FinalSky阅读 5,445评论 0 16
  • 10月17号 星期二 晴 下午很荣幸参加了亲子日记培训。最近我又不太淡定,老是感觉自己太焦虑了。经过一下午...
    楚亦菲妈妈阅读 198评论 0 0