0

我尝试将我们的 Android 应用程序转换为使用 Kotlin DSL 进行 gradle,但我无法让 AppDistribution 在我的 CI 构建中工作。这是我得到的错误:

App Distribution 找到了超过 1 个此变体的输出文件。请联系 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
                    }
                }
        }
    }

我找不到appDistributionProperties.apkPath在 kotlin dsl 中设置的方法:

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”,因为似乎不存在一种强类型的说法。

4

1 回答 1

2

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
                }
            }
        }
    }
}
于 2021-05-25T20:29:07.250 回答