web-dev-qa-db-fra.com

Changer le dossier de sortie apk dans Gradle 4.1

Je souhaite modifier l'APK output folder et voici ce que je faisais:

applicationVariants.all { variant ->
    variant.outputs.all {
        def filePath = "${rootProject.rootDir.absolutePath}/apks/${variant.name}"
        println("My Path: " + filePath)
        outputFileName = filePath
    }
}

Cependant, cela n'a pas fonctionné dans Gradle 4.1 (Aperçu d'Android studio 3.0). Au lieu de générer le dossier comme chemin ci-dessus, il a généré le chemin ci-dessus dans l'ancien dossier debug comme l'image ci-dessous:

enter image description here

Quelqu'un at-il une solution pour cela? Merci.

16
Kingfisher Phuoc

Il s'agit d'une solution de contournement pour conserver le chemin de sortie identique après la mise à niveau vers le niveau 4.x.

applicationVariants.all { variant ->
    variant.outputs.all {
        outputFileName = "../" + outputFileName
    }
}

maintenant apk est généré sur les plateformes/Android/build/sorties/apk/Android-release.apk

20
Harry Han

De guide de migration :

L'utilisation du API Variant pour manipuler les sorties des variantes est rompue avec le nouveau plugin. Il fonctionne toujours pour des tâches simples, telles que la modification du nom de l'APK pendant la construction, comme indiqué ci-dessous:


    Android.applicationVariants.all { variant ->
        variant.outputs.all {
            outputFileName = "${variant.name}-${variant.versionName}.apk"
        }
    }

Cependant, les tâches plus complexes qui impliquent l'accès aux objets outputFile ne fonctionnent plus. En effet, les tâches spécifiques aux variantes ne sont plus créées lors de la configuration. Cela signifie que le plugin ne connaît pas toutes ses sorties à l'avance, mais cela signifie également des temps de configuration plus rapides.

17
azizbekian

J'ai eu un problème similaire, car j'avais besoin de l'apk de sortie dans un dossier connu et non dans un dossier en fonction du nom d'utilisateur de l'ordinateur. J'ai donc fixé comme ceci:

applicationVariants.all { variant ->
    variant.outputs.all {
        def apk = output.outputFile;
        def newName = apk.name.replace(".apk", "-v" + variant.versionName + "-RELEASE.apk");
        newName = newName.replace("-" + variant.buildType.name, "");

        outputFileName = "./" + newName
    }
}

Avec cela, je reçois l'apk dans: ".../sorties/apk/flavourName/buildTypeName/xxx.apk"

J'espère que cela vous aide.

10
Marta Rodriguez