Android Gradle 3.0.0如何只为debug、release flavor添加库依赖?
解决Android Gradle 3.0+中仅指定Flavor引入库的问题
嘿,这个需求其实很好实现,完全不用碰matchingFallbacks——毕竟你根本不想让custom flavor沾到这个库对吧?给你两个最直接的方案:
方案一:直接用Flavor专属依赖关键字(最推荐)
Gradle 3.0+本身就支持针对特定flavor的依赖声明,你只需要明确给debug和release flavor添加依赖,完全不写custom相关的依赖配置就行:
android { productFlavors { debug {} release {} custom {} } } dependencies { // 仅给debug flavor引入myLib的debug变体 debugImplementation project(path: ':myLib', configuration: 'debug') // 仅给release flavor引入myLib的release变体 releaseImplementation project(path: ':myLib', configuration: 'release') // 这里不用写customImplementation,custom flavor自然就不会引入myLib // 其他通用依赖写在这里,比如implementation 'com.android.support:appcompat-v7:28.0.0' }
这种方式最直观,代码可读性强,后续维护也省心。
方案二:用条件判断批量配置(适合flavor较多的场景)
如果你有很多flavor,不想一个个写专属依赖,可以用循环+条件判断来过滤:
android { productFlavors { debug {} release {} custom {} // 其他flavor... } } dependencies { productFlavors.all { flavor -> // 只给debug和release flavor添加依赖,排除custom if (flavor.name in ['debug', 'release']) { // 动态生成对应flavor的依赖声明 "${flavor.name}Implementation" project(path: ':myLib', configuration: flavor.name) } } // 其他通用依赖... }
这种写法能减少重复代码,适合flavor数量较多的项目。
为什么不用matchingFallbacks?
你提到的matchingFallbacks是用来解决flavor变体不匹配的问题(比如你的app有某个flavor,但库没有对应的变体时,回退到其他变体),但你的需求是完全不让custom flavor引入库,所以根本不需要它——只要不给custom flavor配置该库的依赖,它就不会被引入。
内容的提问来源于stack exchange,提问作者Jonny
相关产品推荐
相关产品推荐

