我正在尝试从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,并且[]和都可以访问对象和地图。记号。假设这是正确的,问题就变成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'
}
}
}
答案 0 :(得分:1)
看起来它需要类型转换:
val srcFile = (kotlin.targets[target] as KotlinNativeTarget).compilations["main"].getBinary("FRAMEWORK", buildType)