android - studio - ¿Cómo personalizar el nombre del archivo APK para los sabores del producto?
icon changer apk (9)
Android Gradle Plugin 0.13.0 ha desaprobado el archivo de salida que se usa en:
applicationVariants.all { variant ->
def newApkName = variant.name + "my-custom-addition" + ".apk";
variant.outputFile = new File("${project.buildDir}/outputs/apk/", newApkName);
}
La solución que me funciona es:
android {
...
}
project.archivesBaseName = "AndroidAppGeneric-${_buildVersionNameForMaven}"
Estoy personalizando el nombre del archivo APK de mi aplicación de Android dentro del script build.gradle
siguiente manera:
android {
defaultConfig {
project.ext.set("archivesBaseName", "MyApplication");
}
}
Ahora que estoy usando sabores de producto:
android {
productFlavors {
green {
applicationId "com.example.myapplication.green"
}
blue {
applicationId "com.example.myapplication.blue"
}
}
}
¿Hay alguna manera de personalizar el nombre de cada APK ? Experimenté con archiveBaseName
y baseName
sin éxito. Al final quiero subir con los siguientes archivos:
build/outputs/apk/Blue-debug-1.2.1.apk
build/outputs/apk/Blue-debug-unaligned.apk
build/outputs/apk/Blue-release-1.2.1.apk
build/outputs/apk/Blue-release-unaligned.apk
build/outputs/apk/Green-debug-1.2.1.apk
build/outputs/apk/Green-debug-unaligned.apk
build/outputs/apk/Green-release-1.2.1.apk
build/outputs/apk/Green-release-unaligned.apk
Aquí está mi variante (heh) de la respuesta de Lakshman arriba, no estoy seguro de por qué necesitaba las "variantes.outputs.each" pero lo hice.
defaultConfig {
applicationId "my.company.com"
minSdkVersion 16
targetSdkVersion 25
applicationVariants.all { variant ->
if (variant.productFlavors[0].name.equals("VariantA")) {
variant.outputs.each { output ->
def apk = output.outputFile;
output.outputFile = new File(apk.parentFile, "Blue.apk");
}
} else { // Only two variants
variant.outputs.each { output ->
def apk = output.outputFile;
output.outputFile = new File(apk.parentFile, "Green.apk");
}
}
}
}
Es extraño que lo necesite porque el nombre de archivo apk ya es diferente por defecto.
Si mira here en la línea 1346, puede ver que variantData.variantConfiguration.baseName se usa en el archivo de salida.
variantData.outputFile = project.file("$project.buildDir/apk/${project.archivesBaseName}-${variantData.variantConfiguration.baseName}.apk")
Y la documentación para baseName
es
/**
* Full, unique name of the variant, including BuildType, flavors and test, dash separated.
* (similar to full name but with dashes)
*/
private String mBaseName;
Por lo tanto, ejecutar gradle assembleFreeDebug
debería obtener un archivo ProjectName-free-debug.apk
.
Pero si ese no es el caso, o si desea un nombre de archivo diferente, puede usar el siguiente código para personalizarlo.
android {
buildTypes {
debug {}
alpha {}
release {}
}
productFlavors {
free{}
paid{}
}
applicationVariants.all { variant ->
def newApkName = variant.name + "my-custom-addition" + ".apk";
variant.outputFile = new File("${project.buildDir}/outputs/apk/", newApkName);
}
}
Este trabajo para mí:
Agregue variant.productFlavors[0].name
en el nombre de APK.
Ejemplo de código:
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile(''proguard-android.txt''), ''proguard-rules.pro''
applicationVariants.all { variant ->
variant.outputs.each { output ->
output.outputFile = new File(output.outputFile.parent, "APPNAME_" + variant.productFlavors[0].name + "_" + variant.versionName + ".apk")
}
}
}
}
Estoy usando lo siguiente para que los archivos no se anulen entre sí:
applicationVariants.all { variant ->
variant.outputs.each { output ->
def newApkName = variant.name + "-" + variant.versionName + "(" + variant.versionCode +")" + ".apk";
output.outputFile = new File("${project.projectDir}/outputs/apk/" + variant.name, newApkName);
}
}
Intenta poner esto en tu cierre de android de build.gradle
buildTypes {
debug {
// debug buildType specific stuff
}
release {
// release buildType specific stuff
}
applicationVariants.all { variant ->
if (variant.buildType.name.equals("release") &&
variant.productFlavors[0].name.equals("green") &&
variant.zipAlign) {
def apk = variant.outputFile;
variant.outputFile = new File(apk.parentFile, "green.apk");
} else if(variant.buildType.name.equals("release") &&
variant.productFlavors[0].name.equals("blue") &&
variant.zipAlign) {
def apk = variant.outputFile;
variant.outputFile = new File(apk.parentFile, "blue.apk");
}
}
}
Ahora las salidas deben ser como green.apk
y blue.apk
.
Lo hice así:
productFlavors {
production {
applicationId "com.example.production"
}
staging {
applicationId "com.example.production.staging"
}
applicationVariants.all { variant ->
variant.outputs.each { output ->
if(variant.productFlavors[0].name.equals("staging")){
output.outputFile = new File(output.outputFile.parent,
output.outputFile.name.replace("app-staging-release", "test"));
}else{
output.outputFile = new File(output.outputFile.parent,
output.outputFile.name.replace("app-production-release", "production"));
}
}
}
}
Para Android Gradle Plugin 0.13. + Debes usar algo como esto:
android{
buildTypes {
applicationVariants.all { variant ->
variant.outputs.each { output ->
def apk = output.outputFile;
def newName = "mysms-" + variant.baseName.replace("-release", "") + "-" + defaultConfig.versionName + ".apk";
output.outputFile = new File(apk.parentFile, newName);
}
}
}
}
Para Android Studio 3.0 debes cambiar de:
applicationVariants.all { variant ->
variant.outputs.each { output ->
output.outputFile = new File(output.outputFile.parent, "whatever" + ".apk")
}
}
A:
android.applicationVariants.all { variant ->
variant.outputs.all {
outputFileName = "whatever" + ".apk")
}
}