android - 使用 gradle DSL 声明多模块项目中的 flavor 依赖性

标签 android android-productflavors gradle-kotlin-dsl

假设:

  • 模块 M(Android 库)具有 M1M2 风格
  • 功能模块F取决于模块M
  • 应用A依赖于功能模块F并具有A1A2风格 (与M中的尺寸不同)
  • 此外,应用A风格A1 取决于M1A2取决于M2

是否可以在 Gradle Kotlin DSL 中配置此类依赖项?特别是考虑到模块 FA1A2 风格一无所知。

使用一些额外信息进行编辑:在我的特定情况下,M1M2仅用于引入特定 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库模块)引入F1F2风格。你说“功能模块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 会自动为 FM 选择正确的风格。

正如你所问的,FA1A2一无所知。我希望这回答了你的问题。如果没有,请发表评论。 Here's a sample project showing this .

关于android - 使用 gradle DSL 声明多模块项目中的 flavor 依赖性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62340732/

相关文章:

android - 通过 Kotlin DSL 从 local.properties 读取值

java - 如何在java中将json添加到http帖子的正文中

java - 在 Android Studio Java 中读取数据库标题并显示在 ListView 中

Android ConnectException 错误 - EHOSTUNREACH(无路由到主机)错误

android - 使用 Kotlin DSL 配置 Protocol Buffers 0.9.x

android - Kotlin DSL 构建脚本依赖更新

android - 清除内存不足异常的堆内存

android 按口味链不同的 applicationId 和 applicationIdSuffix

安卓gradle : Sharing dependencies between product flavors

android - 管理多种口味……呈指数级增长?