假设:
F
对A1和A2风味一无所知。带有某些额外信息的编辑
:在我的特殊情况下,M1和M2仅用于引入特定资产。因此F并不关心这些,因此对M具有一般的依赖性。missingDimensionStrategy
解决您的问题。 以下是缩写脚本:
module / build.gradle.kts
android {
flavorDimensions("module-dimension")
productFlavors {
create("module1") {
setDimension("module-dimension")
}
create("module2") {
setDimension("module-dimension")
}
}
}
feature / build.gradle.kts
android {
flavorDimensions("feature-dimension")
productFlavors {
create("feature1") {
setDimension("feature-dimension")
// Tells gradle to use "module1" flavor of the "module" module for this flavor.
missingDimensionStrategy("module-dimension", "module1")
}
create("feature2") {
setDimension("feature-dimension")
missingDimensionStrategy("module-dimension", "module2")
}
}
}
dependencies {
implementation(project(":module"))
}
我必须将风味和F2引入F模块(我猜是一个android库模块)。您说“功能模块F取决于模块M”,但是M的哪种风格?我猜想这是应用程序所依赖的味道。无论如何,如果您不在功能模块中提供风味特定的代码,则结果是相同的。F1
app / build.gradle.kts
android {
flavorDimensions("app-dimension")
productFlavors {
create("app1") {
setDimension("app-dimension")
missingDimensionStrategy("module-dimension", "module1")
missingDimensionStrategy("feature-dimension", "feature1")
}
create("app2") {
setDimension("app-dimension")
missingDimensionStrategy("module-dimension", "module2")
missingDimensionStrategy("feature-dimension", "feature2")
}
}
}
dependencies {
implementation(project(":module"))
implementation(project(":feature"))
}
如果仅取决于M,则可以通过将F的风味和风味尺寸重命名为与[[M风味相同)来稍微简化一下。这样,您可以避免必须在F中指定F
missingDimensionStrategy
,而仅使用其中之一而不是A中的两个。这是因为当风味在各个模块之间匹配时,构建系统会自动解析正确的风味。[您会看到,当您更改A的样式时,Android Studio会自动为F
和M选择正确的样式。根据您的要求,F对A1
和A2一无所知。我希望这回答了你的问题。如果没有,请发表评论。 Here's a sample project showing this。