在使用gradle DSL的多模块项目中声明风味依赖项

问题描述 投票:1回答:1

假设:

  • 模块M(Android库)具有口味M1M2
  • 功能模块F取决于模块M
  • App A取决于功能模块F,并且具有风味[A2(与M中的尺寸不同)
  • 此外,应用程序
  • A
  • 风味A1取决于M1A2取决于M2
是否可以在Gradle Kotlin DSL中配置此类依赖项?特别是考虑模块

F

A1A2风味一无所知。

带有某些额外信息的编辑

:在我的特殊情况下,M1M2仅用于引入特定资产。因此F并不关心这些,因此对M具有一般的依赖性。
android android-productflavors gradle-kotlin-dsl
1个回答
1
投票
我能够使用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")) }
我必须将风味

F1

F2引入F模块(我猜是一个android库模块)。您说“功能模块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
© www.soinside.com 2019 - 2024. All rights reserved.