Changer le nom apk avec Gradle

J’ai un projet Android qui utilise Gradle pour le processus de construction. Maintenant, je veux append deux types de build supplémentaires, staging et production, pour que ma build.gradle contienne:

android { buildTypes { release { runProguard false proguardFile getDefaultProguardFile('proguard-android.txt') } staging { signingConfig signingConfigs.staging applicationVariants.all { variant -> appendVersionNameVersionCode(variant, defaultConfig) } } production { signingConfig signingConfigs.production } } } 

et mon appndVersionNameVersionCode ressemble à:

 def appendVersionNameVersionCode(variant, defaultConfig) { if(variant.zipAlign) { def file = variant.outputFile def fileName = file.name.replace(".apk", "-" + defaultConfig.versionName + "-" + defaultConfig.versionCode + ".apk") variant.outputFile = new File(file.parent, fileName) } def file = variant.packageApplication.outputFile def fileName = file.name.replace(".apk", "-" + defaultConfig.versionName + "-" + defaultConfig.versionCode + ".apk") variant.packageApplication.outputFile = new File(file.parent, fileName) } 

Si j’exécute la tâche assembleStaging, j’obtiens le nom propre de mon apk, mais quand j’exécute assembleProduction, je reçois des noms modifiés pour mon apk (comme dans le cas de la mise en scène). Par exemple:

 MyApp-defaultFlavor-production-9.9.9-999.apk MyApp-defaultFlavor-production-9.9.9-999.apk 

Il semble que dans le type de build de production soit exécuté appendVersionNameVersionCode . Comment puis-je l’éviter?

    Comme CommonsWare a écrit dans son commentaire, vous devriez appeler appendVersionNameVersionCode uniquement pour les variantes de appendVersionNameVersionCode . Vous pouvez facilement faire cela, modifiez légèrement votre méthode appendVersionNameVersionCode , par exemple:

     def appendVersionNameVersionCode(variant, defaultConfig) { //check if staging variant if(variant.name == android.buildTypes.staging.name){ if(variant.zipAlign) { def file = variant.outputFile def fileName = file.name.replace(".apk", "-" + defaultConfig.versionName + "-" + defaultConfig.versionCode + ".apk") variant.outputFile = new File(file.parent, fileName) } def file = variant.packageApplication.outputFile def fileName = file.name.replace(".apk", "-" + defaultConfig.versionName + "-" + defaultConfig.versionCode + ".apk") variant.packageApplication.outputFile = new File(file.parent, fileName) } } 

    La solution de Lecho ne fonctionne pas pour Android Gradle Plugin 0.14.3+ en raison de la suppression d’APIS obsolète: http://tools.android.com/tech-docs/new-build-system

    Presque 1.0: suppression des propriétés / méthodes obsolètes

    • Variant.packageApplication / zipAlign / createZipAlignTask / outputFile / processResources / processManifest (utilise la sortie variant)

    Les travaux suivants pour moi:

     def appendVersionNameVersionCode(variant, defaultConfig) { variant.outputs.each { output -> if (output.zipAlign) { def file = output.outputFile def fileName = file.name.replace(".apk", "-" + defaultConfig.versionName + "-" + defaultConfig.versionCode + ".apk") output.outputFile = new File(file.parent, fileName) } def file = output.packageApplication.outputFile def fileName = file.name.replace(".apk", "-" + defaultConfig.versionName + "-" + defaultConfig.versionCode + ".apk") output.packageApplication.outputFile = new File(file.parent, fileName) } } 

    J’ai utilisé une petite version générique de celui-ci. construire et installer correctement. Par exemple, votre nom de projet est “Salad”, alors, pour le staging, le nom apk sera “Salad-staging-dd-MM-YY”. Vous pouvez également changer pour debug et release apk. J’espère que ma solution sera meilleure.
    Changer dans projectName/app/build.gradle

     buildTypes { debug{ } staging{ debuggable true signingConfig signingConfigs.debug applicationVariants.all { variant -> variant.outputs.each { output -> def date = new Date(); def formattedDate = date.format('dd-MM-yyyy') def appName = getProjectDir().getParentFile().name output.outputFile = new File(output.outputFile.parent, output.outputFile.name.replace(getProjectDir().name +"-staging", "$appName-staging-" + formattedDate) //for Debug use output.outputFile = new File(output.outputFile.parent, // output.outputFile.name.replace("-debug", "-" + formattedDate) ) } } } release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } 

    changer le nom de l’application Android ref

    Voici ce que j’ai fait:

      def appName if (project.hasProperty("applicationName")) { appName = applicationName } else { appName = parent.name } applicationVariants.all { variant -> variant.outputs.each { output -> output.outputFile = new File(output.outputFile.parent, output.outputFile.name.replace("app-release.apk", appName + "_V" + versionCode + ".apk")) } }