我的应用中有3种产品风味(风味1、风味2、风味3)。风味1和风味2共享一些与广告相关的依赖项。
是否有办法将广告相关依赖项绑定到一个gradle维度或配置,并将其添加到flavor1和flavor2,而无需复制我的build.gradle中的compileFlavor1和compileFlavor2行?
这是我目前等级的一部分。这很有效。但是,我想知道是否有更好的方法来做到这一点?所以,我不必重复每一种风格的广告依赖关系。
android {
productFlavors {
flavor1 {}
flavor2 {}
flavor3 {}
}
sourceSets {
main {}
flavor1.java.srcDir 'common/ads/java' <--- shared sourceSet
flavor2.java.srcDir 'common/ads/java'
flavor3.java.srcDir 'common/no_ads/java'
}
}
dependencies {
compile 'dependency1'
compile 'dependency2'
compileFlavor1 'dependency3' <----- Same list
compileFlavor1 'dependency4'
compileFlavor1 'dependency5'
compileFlavor2 'dependency3' <------ Same list
compileFlavor2 'dependency4'
compileFlavor2 'dependency5
}
3条答案
按热度按时间cgfeq70w1#
用于在风格之间共享依赖项的解决方案(针对
implementation
进行了更新,implementation
现已取代compile
):由于
implementation
、flavor1Implementation
、flavor2Implementation
等实际上本身都是Configurations,因此实际上可以在构建过程中的这些步骤之间应用继承关系。因此,在这种情况下,您可以指定共享依赖项,以及仅针对
flavor1
的依赖项:...然后简单地允许
flavor2Implementation
从flavor1Implementation
继承:这也可以用于定义风味之间更复杂的关系,并且支持多重继承,例如:
(最后,需要注意的是,在不同风格之间共享代码应该继续按照最初的问题使用
sourceSets
进行处理。)nsc4cvqm2#
下面是我们在不同风格之间共享目录所做的工作:
798qvoo83#
我找不到一种简洁的方法来实现这一点(风味继承对我来说不是一个选项),所以我为它编写了一个小实用程序。
实用程序
只需在
dependencies
块之前添加以下函数:用法
该实用程序的使用方法如下:
工作原理
此实用程序的关键是gradle的
dependencies.add
API,它采用2个参数:1.依赖项的类型,例如
implementation
、api
、flavor1Implementation
。这可以是字符串,它允许我们使用字符串操作动态创建此值。1.依赖项本身,例如
"com.example.test:test:1.0.0"
、project(':local')
。使用这个API,您可以动态地添加依赖项,具有相当大的灵活性!