Как изменить сгенерированное имя файла для пакетов приложений с помощью Gradle?

Поэтому, чтобы сменить сгенерированное имя файла APK внутри андроида градиента, я мог бы сделать что-то вроде:

applicationVariants.output.all {
    outputFileName = "the_file_name_that_i_want.apk"
}

Есть ли аналогичная вещь для сгенерированного файла приложения Bundle? Как изменить сгенерированное имя файла приложения Bundle?

Ответ 1

В качестве более общего способа ответа Мартина Цейтлера ниже будет прослушиваться добавленные задачи, а затем вставляться задачи переименования для любой добавляемой задачи bundle*.

Просто добавьте его в конец файла build.gradle.

Примечание. Это добавит больше задач, чем необходимо, но эти задачи будут пропущены, поскольку они не соответствуют ни одной папке. например > Task :app:renameBundleDevelopmentDebugResourcesAab NO-SOURCE

tasks.whenTaskAdded { task ->
    if (task.name.startsWith("bundle")) {
        def renameTaskName = "rename${task.name.capitalize()}Aab"
        def flavor = task.name.substring("bundle".length()).uncapitalize()
        tasks.create(renameTaskName, Copy) {
            def path = "${buildDir}/outputs/bundle/${flavor}/"
            from(path)
            include "app.aab"
            destinationDir file("${buildDir}/outputs/renamedBundle/")
            rename "app.aab", "${flavor}.aab"
        }

        task.finalizedBy(renameTaskName)
    }
}

Ответ 2

Вы можете использовать что-то вроде этого:

defaultConfig {
  applicationId "com.test.app"
  versionCode 1
  versionName "1.0"
  setProperty("archivesBaseName", applicationId + "-v" + versionCode + "(" + versionName + ")")
}

Ответ 3

Тем временем я нашел лучший способ сделать это...

// it sets task.finalizedBy for :bundle
tasks.whenTaskAdded { task ->
    switch (task.name) {
        case 'bundleDebug':
        case 'bundleRelease':
            task.finalizedBy renameBundle
            break
    }
}

используя задачу Exec (все еще не знаете, как будет выглядеть синтаксис задачи ant.move):

// it finalizes task :bundle
task renameBundle (type: Exec) {

    description "it renames an Android App Bundle"

    def bundlePath = rootProject.getProjectDir().getAbsolutePath() + "/${project.name}/build/outputs/bundle/release/"
    def baseName = getProperty('archivesBaseName')
    def srcFile = "${baseName}.aab"
    def dstFile = "${baseName}_renamed.aab"

    def stdout = new ByteArrayOutputStream()
    def stderr = new ByteArrayOutputStream()

    commandLine "mv", "-v", "${srcFile}", "${dstFile}"
    workingDir = bundlePath
    ignoreExitValue true
    standardOutput stdout
    errorOutput stderr

    doLast {
        if (execResult.getExitValue() == 0) {
            println ":${project.name}:${name} > ${stdout.toString()}"
        } else {
            println ":${project.name}:${name} > ${stderr.toString()}"
        }
    }
}

Это ничего не оставляет - и вы можете переместить файл туда, куда захотите.

Ответ 4

Это простой, который работает для меня с помощью Android Studio 3

Изменить модуль (приложение) build.gradle и добавить ниже:

android.applicationVariants.all { variant ->
variant.outputs.all {
    def appName = "YourAPKName"
    outputFileName = appName+"-${variant.versionName}.apk"
}
}

Этот код будет генерировать файл с именем: YourAPKName-1.0.apk