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

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

提问人:Noice2D 提问时间:2/27/2020 更新时间:3/3/2020 访问量:1052

问:

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

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

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

android-gradle-plugin build.gradle android-productflavors

评论


答:

1赞 Noice2D 3/3/2020 #1

在阅读了其他问题和答案后,我意识到我必须创建自定义任务:如何使用 Gradle 更改 App Bundle 生成的文件名?

重命名 applicationVariants.outputs 的 outputFileName 不起作用,因为这些是针对 .apk 的。

我正在使用 Gradle 5.4.1,所以我的复制任务语法参考在这里

我不太明白“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)
    }
}

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

任务 :app:renameBundleReleaseResourcesAab NO-SOURCE