我的应用程序中有3种产品口味(flavor1,flavor2,flavor3)。 flavor1和flavor2共享一些与广告相关的依赖项。
有没有办法将广告相关的依赖项捆绑到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
}
答案 0 :(得分:0)
这就是我们在各种风格之间共享目录所做的工作:
sourceSets {
main {
java.srcDirs = ['src/main/java']
res.srcDirs = ['src/main/res']
assets.srcDirs = ['src/main/assets']
}
production {
java.srcDirs = ['src/main/java', 'src/shared/java']
res.srcDirs = ['src/main/res', 'src/shared/res']
assets.srcDirs = ['src/main/assets', 'src/shared/assets']
}
logger {
java.srcDirs = ['src/main/java', 'src/shared/java', 'src/mock/java']
res.srcDirs = ['src/main/res', 'src/shared/res']
assets.srcDirs = ['src/main/assets', 'src/shared/assets']
}
nowav {
java.srcDirs = ['src/main/java', 'src/nowav/java', 'src/mock/java']
res.srcDirs = ['src/main/res', 'src/nowav/res']
assets.srcDirs = ['src/main/assets', 'src/nowav/assets']
}
}
答案 1 :(得分:0)
共享风味之间的依赖关系的解决方案(已针对implementation
进行了更新,现已取代compile
):
由于implementation
,flavor1Implementation
,flavor2Implementation
等实际上都是Configurations本身,因此您实际上可以在构建过程中的这些步骤之间应用继承关系。 / p>
因此,在这种情况下,您可以指定共享的依存关系,以及仅对flavor1
的依存关系:
dependencies {
implementation 'dependency1'
implementation 'dependency2'
flavor1Implementation 'dependency3'
flavor1Implementation 'dependency4'
flavor1Implementation 'dependency5'
}
...然后仅允许flavor2Implementation
从flavor1Implementation
继承:
configurations.flavor2Implementation.extendsFrom(flavor1Implementation)
这也可以用于定义风味之间的更复杂的关系,并且支持多种继承,例如:
configurations {
flavor3Implementation.extendsFrom(
flavor1Implementation,
flavor2Implementation
)
}
(最后,请注意,按照原始问题,应继续使用sourceSets
处理风味之间的共享代码。)