假设:
- 模块 M(Android 库)具有 M1 和 M2 风格
- 功能模块F取决于模块M
- 应用A依赖于功能模块F并具有A1和A2风格 (与M中的尺寸不同)
- 此外,应用A风格A1 取决于M1,A2取决于M2
是否可以在 Gradle Kotlin DSL 中配置此类依赖项?特别是考虑到模块 F 对 A1 和 A2 风格一无所知。
使用一些额外信息进行编辑:在我的特定情况下,M1和M2仅用于引入特定 Assets 。所以 F 不关心这些,所以只是一般依赖于 M。
最佳答案
我能够通过 missingDimensionStrategy
解决您的问题。
以下是缩写脚本:
模块/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"))
}
我必须向F模块(我猜是一个android库模块)引入F1和F2风格。你说“功能模块F依赖于模块M”,但是M是哪种风格呢?我猜想应用程序所依赖的味道是相同的。无论如何,如果您不在功能模块中提供特定于风格的代码,结果是相同的。
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"))
}
如果F仅依赖于M,那么您可以通过将F的口味和口味维度重命名为来稍微简化一下与M口味相同。这样,您就可以避免在 F 中指定 missingDimensionStrategy
,并且仅使用其中一个而不是在 A 中使用两个。这是因为当模块之间的风格匹配时,构建系统会自动解析正确的风格。
当您更改 A 的风格时,您会看到 Android Studio 会自动为 F 和 M 选择正确的风格。
正如你所问的,F对A1和A2一无所知。我希望这回答了你的问题。如果没有,请发表评论。 Here's a sample project showing this .
关于android - 使用 gradle DSL 声明多模块项目中的 flavor 依赖性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62340732/