2

传统上,在 Groovy 中,可以在ext {}块中定义特定于风味的变量,但切换到 Kotlin DSL 似乎extra地图具有项目范围。

看起来可以通过使用以下方法强制为附加功能设置风味范围:

productFlavors {
        register("flavor1") {
            require(this is ExtensionAware)
            ...
        }

        register("flavor2") {
            require(this is ExtensionAware)
            ...
        }
}

(来源:https ://github.com/gradle/kotlin-dsl-samples/issues/1254 )

但是如果以后需要使用它,例如基于buildType这样的调整变量:

variants.forEach { variant ->
  val flavor = variant.productFlavors[0]
  val size = ?? // extra??
  variant.buildConfigField("String", "SIZE", size)
}

这些风味范围的引用将extra如何使用?

4

1 回答 1

2

目前,只有一种访问 ProductFlavor ext 属性的工作方法是这种方式

    variant.productFlavors.forEach { flavor ->
        require(flavor is ReadOnlyProductFlavor)
        val properties = (flavor.getProperty("ext") as DefaultExtraPropertiesExtension).properties
    }

或者也许更清楚

    val flavor = variant.productFlavors[0] as ReadOnlyProductFlavor
    val extra = flavor.getProperty("ext") as DefaultExtraPropertiesExtension
    extra.get("myPropertyName")

当您调用不存在的属性时,它的作用与 Groovy 的作用相同ext

我创建了一个功能请求以使其更容易 https://issuetracker.google.com/issues/161115878

于 2020-07-24T23:26:46.607 回答