【问题标题】:Loop all SourceSets - Groovy -> Kotlin DSL循环所有 SourceSets - Groovy -> Kotlin DSL
【发布时间】:2020-12-02 11:02:31
【问题描述】:

如何在 kotlin DSL 中循环所有源集?下面的 groovy 代码循环所有源集,包括像 androidTestFoobarProdDebug 这样的“乘法”

flavorDimensions("brand", "releaseType")
productFlavors {
    create("prod") {
        dimension = "releaseType"
    }
    create("foobar") {
        dimension = "brand"
    }
}
sourceSets.all { com.android.build.api.dsl.AndroidSourceSet sourceSet ->
     // Also prints foorbarProd
     println("0 "+sourceSet.name)
}
sourceSets.all {
    println("1 "+it.name)
}

但是这个 kotlin 代码不会像 foobarProdDebug 那样循环乘法级联风味维度

sourceSets.all { sourceSet ->
    println(sourceSet.name) // does not print foobarProd
    true // seems its a predicate in kotlin
}

【问题讨论】:

    标签: android kotlin gradle gradle-kotlin-dsl


    【解决方案1】:

    People at Google 非常好心地帮助我:

    遗憾的是,这似乎是 kotlin 的 all 集合扩展方法(非惰性)和 gradle 的 DomainObjectContainer.all(惰性)的混合。

    如果你改变了

    sourceSets.all { sourceSet -> //: com.android.build.api.dsl.AndroidSourceSet ->
        println("sourceSet.name = \"src/${name}/svg\"")
        true // seems its a predicate in kotlin
    }
    

    sourceSets.all {// this: com.android.build.api.dsl.AndroidSourceSet ->
        println("sourceSet.name = \"src/${name}/svg\"")
        // Not a kotlin.sequences.all call anymore so nothing to return
    }
    

    它有效。

    这是完整的 kotlin 解决方案:

    flavorDimensions("brand", "releaseType")
    productFlavors {
        create("prod") {
            dimension = "releaseType"
        }
        create("foobar") {
            dimension = "brand"
        }
    }
    sourceSets.all {
        println(name)
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-06
      • 1970-01-01
      • 2022-10-14
      • 2019-07-08
      • 1970-01-01
      • 2022-12-10
      相关资源
      最近更新 更多