studio pro generate generar firmar configurar assembledebug android gradle apk android-gradle

android - pro - Cambiar el nombre apk con Gradle



generate release apk android studio (4)

Como CommonsWare escribió en su comentario, debe llamar a appendVersionNameVersionCode solo para variantes de etapas. Puede hacerlo fácilmente, simplemente modifique ligeramente su método appendVersionNameVersionCode , por ejemplo:

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) } }

Tengo un proyecto de Android que usa Gradle para el proceso de compilación. Ahora quiero agregar dos etapas de compilación y producción, así que mi build.gradle contiene:

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

y mi appndVersionNameVersionCode se ve así:

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 ejecuto task assembleStaging , obtengo el nombre correcto de mi apk, pero cuando ejecuto assembleProduction , obtengo los nombres cambiados de mi apk (como en el caso de ensayo). Por ejemplo:

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

Parece que en el tipo de compilación de producción se ejecuta appendVersionNameVersionCode . ¿Cómo puedo evitarlo?


Esto es lo que hice:

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


He usado una pequeña versión genérica de ella. construir e instalar bien. por ejemplo, su projectName es "Salad", luego, para organizar el nombre apk será "Salad-staging-dd-MM-YY", también puede cambiar para depurar y lanzar apk. Espero que mi solución sea mejor.
Cambio en 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'' }

para cambiar el nombre de la aplicación de Android ref


La solución de Lecho no funciona para Android Gradle Plugin 0.14.3+ debido a la eliminación de APIS en desuso: http://tools.android.com/tech-docs/new-build-system

Casi 1.0: eliminado las propiedades / métodos obsoletos

...

  • Variant.packageApplication / zipAlign / createZipAlignTask / outputFile / processResources / processManifest (use la salida de variante)

Lo siguiente funciona para mí:

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) } }