web-dev-qa-db-fra.com

Comment changer le nom de fichier généré pour les bundles d'applications avec Gradle?

Donc, pour changer le nom de fichier APK généré dans gradle Android je pourrais faire quelque chose comme:

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

Existe-t-il une chose similaire pour le fichier Bundle d'applications généré? Comment puis-je changer le nom de fichier du bundle d'applications généré?

14
Archie G. Quiñones

Comme moyen plus générique de réponse de Martin Zeitlers ce qui suit écoutera les tâches ajoutées, puis insérera des tâches de renommage pour tout bundle* tâche qui est ajoutée.

Ajoutez-le simplement au bas de votre build.gradle fichier.

Remarque: il ajoutera plus de tâches que nécessaire, mais ces tâches seront ignorées car elles ne correspondent à aucun dossier. par exemple. > 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)
    }
}
14
David Medenjak

Vous pouvez utiliser quelque chose comme ceci:

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

En attendant, j'ai trouvé une meilleure façon de le faire ...

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

en utilisant une tâche Exec (se demandant encore comment la syntaxe d'un ant.move la tâche se ressemblerait):

// 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()}"
        }
    }
}

Cela ne laisse rien de côté - et on peut déplacer le fichier où l'on veut.

5
Martin Zeitler