【问题标题】:How to disable default gradle buildType suffix (-release, -debug)如何禁用默认的 gradle buildType 后缀(-release,-debug)
【发布时间】:2023-03-18 11:14:02
【问题描述】:
我迁移了第 3 方工具的 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】:
在阅读其他问题和答案后,我意识到我必须创建自定义任务:
How to change the generated filename for App Bundles with 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)
}
}
正如原始答案所说:这将添加不必要的任务,但这些任务将被跳过,因为它们与任何文件夹都不匹配。
例如
任务:app:renameBundleReleaseResourcesAab NO-SOURCE