конвертирование отличного файла iOS / Android в kotlin - getBinary, getProperty (+ литеральные атрибуты)? - PullRequest
0 голосов
/ 07 декабря 2018

Я пытаюсь преобразовать файлы gradle для проекта с целями iOS и Android из groovy

У меня есть две строки в файле groovy

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

Первая проблема"цели" в качестве атрибута.Target - это свойство, представляющее собой строку, так что это похоже на использование строки в качестве имени атрибута.Но я ожидаю, что targets - это карта, а также и компиляции?

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

кажется правильным kotlin, поэтому я предполагаю, что groovy похож на js, и объекты и карты могут быть доступны как с помощью [], так и.нотации.Если предположить, что это правильно, проблема состоит в том, что getBinary и getProperty неизвестны.

Любая помощь с этим приветствуется.

Для справки, эти строки являются частью задачи:

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 голосов
/ 11 января 2019

Похоже, для этого требуется приведение типа:

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