Я понял, что мне нужно создавать собственные задачи после прочтения других вопросов и ответов: Как изменить сгенерированное имя файла для комплектов приложений с Gradle?
Переименование applicationVariants.outputs 'outputFileName делает не работает, потому что это для .apks.
Я использую Gradle 5.4.1, поэтому моя ссылка на синтаксис задачи копирования здесь .
Я не совсем понимаю откуда взялась строка имени «app.aab», поэтому я определил свою собственную строку имени aabFile, чтобы она соответствовала выводу моей цепочки инструментов.
Меня не волнует исходный файл, поэтому он не удаляется другой задачей удаления.
Также мой набор инструментов, похоже, удаляет неизвестные переменные, окруженные "$ {}", поэтому мне пришлось Обходите $ {buildDir} и $ {flav}, опуская скобки и используя конкатенацию для правильного разграничения.
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