una studio quitar nombre iconos icono icon directo cómo como changer cambiar aplicación aplicacion acceso android gradle android-gradle build.gradle android-productflavors

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