如何禁用默认 gradle buildType 后缀(-release,-debug)

How to disable default gradle buildType suffix (-release, -debug)

我迁移了第 3 方工具的 gradle.build 配置,因此它使用 android gradle 插件 3.5.3 和 gradle 5.4.1。

构建一切顺利,但是当我尝试制作 .aab 存档时,事情被打破了,因为工具链期望输出的 .aab 文件被命名为 MyApplicationId.aab,但是新的 gradle 默认输出 MyApplicationId-release.aab,带有不存在的 buildType 后缀。

我试图搜索解决方案,但有关产品口味的文档大多是关于添加后缀的。如何防止添加默认的“-release”后缀?工具链的 gradle 配置文件中没有任何产品风味块。

我意识到我必须在阅读其他问题和答案后创建自定义任务:

重命名 applicationVariants.outputs' outputFileName 不起作用,因为这些是用于 .apks 的。

我使用的是 Gradle 5.4.1,所以我的复制任务语法参考是 here

我不太明白 "app.aab" 名称字符串从何而来,所以我定义了自己的 aabFile 名称字符串以匹配我的工具链的输出。

我不关心源文件,所以它不会被另一个删除任务删除。

此外,我的工具链似乎正在删除被“${}”包围的未知变量,因此我不得不通过省略括号并使用串联来正确分隔来解决 ${buildDir} 和 ${flavor}。

    tasks.whenTaskAdded { task ->
    if (task.name.startsWith("bundle")) { // e.g: buildRelease
        def renameTaskName = "rename${task.name.capitalize()}Aab" // renameBundleReleaseAab
        def flavorSuffix = task.name.substring("bundle".length()).uncapitalize() // "release"
        tasks.create(renameTaskName, Copy) {
            def path = "$buildDir/outputs/bundle/" + "$flavorSuffix/"
            def aabFile = "${android.defaultConfig.applicationId}-" + "$flavorSuffix" + ".aab"
            from(path) {
                include aabFile
                rename aabFile, "${android.defaultConfig.applicationId}.aab"
            }
            into path
        }

        task.finalizedBy(renameTaskName)
    }
}

正如原来的答案所说:这将添加比必要更多的任务,但这些任务将被跳过,因为它们不匹配任何文件夹。 例如

Task :app:renameBundleReleaseResourcesAab NO-SOURCE