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