我已经尝试将我们的Android应用程序转换为使用Kotlin DSL for gradle,但我无法让AppDistribution在我的CI构建中工作。这是我得到的错误:
应用程序分发找到了此变体的多个输出文件。请联系firebase-support@google.com以获取使用APK拆分和应用程序分发的帮助。
这就是groovy中的工作原理:
applicationVariants.all { variant ->
variant.outputs.each { output ->
tasks.findAll {
it.name.startsWith(
"appDistributionUpload${variant.name.capitalize()}")
}.each {
it.doFirst {
it.appDistributionProperties.apkPath = output.outputFile.absolutePath
}
}
}
}
我找不到在kotlin dsl:中设置appDistributionProperties.apkPath
的方法
applicationVariants.forEach { variant ->
variant.outputs.forEach { output ->
tasks.filter {
it.name.startsWith("appDistributionUpload${variant.name.capitalize()}")
}.forEach {
it.doFirst {
it.setProperty("apkPath", output.outputFile.absolutePath)
}
}
}
}
我想我需要一根神奇的绳子,而不仅仅是";apkPath";,因为似乎不存在一种强类型的表达方式。
Kotlin dsl方式:
android.applicationVariants.all {
this.outputs.all {
val output = this
tasks.matching {
it.name.startsWith(
"appDistributionUpload${this.name.capitalize()}"
)
}.forEach {
it.doFirst {
if (it is com.google.firebase.appdistribution.gradle.UploadDistributionTask) {
it.appDistributionProperties.get().apkPath = output.outputFile.absolutePath
}
}
}
}
}