将iOS / Android groovy gradle文件转换为kotlin-getBinary,getProperty(+文字属性)?

时间:2018-12-06 21:47:44

标签: gradle groovy kotlin multiplatform gradle-kotlin-dsl

我正在尝试从groovy转换具有iOS和Android目标的项目的gradle文件

我在常规文件中有这两行

    val srcFile = kotlin.targets."$target".compilations.main.getBinary("FRAMEWORK", buildType)}
    val targetDir = getProperty("configuration.build.dir")

第一个挑战是将“ $ targets”作为属性。目标是作为字符串的属性,因此就像使用字符串作为属性名称一样。但是我希望targets是一张地图,编译也是吗?

    val srcFile = kotlin.targets[target].compilations[main].getBinary("FRAMEWORK", buildType)}
    val targetDir = getProperty("configuration.build.dir")

似乎是有效的Kotlin,所以我假设这种情况就像js,并且[]和都可以访问对象和地图。记号。假设这是正确的,问题就变成getBinarygetProperty都未知。

对此表示感谢的任何帮助。

作为参考,这些行是任务的一部分:

task("copyFramework") {
    val buildType:String = project.findProperty("kotlin.build.type") as String??: "DEBUG"
    val target:String = project.findProperty("kotlin.target")as String? ?: "ios"
    dependsOn("link${buildType.toLowerCase().capitalize()}Framework${target.capitalize()}")

    doLast {
        val srcFile = kotlin.targets[target].compilations["main"].getBinary("FRAMEWORK", buildType)
        val targetDir = getProperty("configuration.build.dir")
        copy {
            from(srcFile.parent)
            into(targetDir)
            include("app.framework/**")
            include("app.framework.dSYM")
        }
    }

从常规转换为(到目前为止):

task copyFramework {
    def buildType = project.findProperty("kotlin.build.type") ?: "DEBUG"
    def target = project.findProperty("kotlin.target") ?: "ios"
    dependsOn "link${buildType.toLowerCase().capitalize()}Framework${target.capitalize()}"

    doLast {
        def srcFile = kotlin.targets."$target".compilations.main.getBinary("FRAMEWORK", buildType)
        def targetDir = getProperty("configuration.build.dir")
        copy {
            from srcFile.parent
            into targetDir
            include 'app.framework/**'
            include 'app.framework.dSYM'
        }
    }
}

1 个答案:

答案 0 :(得分:1)

看起来它需要类型转换:

val srcFile = (kotlin.targets[target] as KotlinNativeTarget).compilations["main"].getBinary("FRAMEWORK", buildType)