tutorial studio para now must flavors flavor descargar configurar belong all android build gradle code-signing

now - descargar gradle para android studio



Firmar sabores del producto con gradle (3)

El complemento gradle para Android solo admite la firma por tipo de compilación, no por sabor. La razón para esto es que cualquier variante dada (tipo de compilación + sabores) solo se puede firmar con una tecla, pero puede ser una combinación de varios grupos de sabores. Por ejemplo, sus grupos de sabores podrían ser cpu (x86 / arm) y versión (free / paid), es decir, cuatro variantes diferentes allí.

La solución que está buscando es crear tipos de compilación separados para sus diferentes versiones de lanzamiento. Por ejemplo, sus tipos de compilación pueden ser de debug , release , release-beta , como esta:

... android { ... buildTypes { debug { signingConfig signingConfigs.debug } release { signingConfig signingConfigs.release } release-beta { initWith release signingConfig signingConfigs.release-beta } } }

El initWith anterior simplemente le dice a gradle que release-beta debe ser una copia del tipo de compilación de release , solo debe estar firmado con una clave diferente.

Estoy a punto de migrar mis proyectos a Gradle. Uno de mis proyectos tiene múltiples sabores de productos y cada uno de ellos debe estar firmado con un signingConfig diferente en su versión de lanzamiento. Así que esto es lo que intenté hasta ahora:

buildscript { ... } apply plugin: ''android'' android { compileSdkVersion 17 buildToolsVersion ''17'' signingConfigs { flavor1 { storeFile file("keystore") storePassword "secret" keyAlias "aliasForFlavor1" keyPassword "secretFlavor1" } flavor2 { storeFile file("keystore") storePassword "secret" keyAlias "aliasForFlavor2" keyPassword "secretFlavor2" } } productFlavors { flavor1 { signingConfig signingConfigs.flavor1 } flavor1 { signingConfig signingConfigs.flavor2 } } } dependencies { ... }

Cuando gradle build obtengo una groovy.lang.MissingFieldException y el siguiente mensaje de error:

No such field: signingConfigs for class: com.android.build.gradle.internal.dsl.GroupableProductFlavorFactory

Así que supongo que los productFlavors. * Parte del script de Gradle no es el lugar correcto para poner configuraciones de firma de código.


Puede declarar la signing config para cada flavor en buildType . Aquí está mi archivo gradle para los sabores de firma de lanzamiento con diferentes almacenes de claves.

android { signingConfigs { configFirst { keyAlias ''alias'' keyPassword ''password'' storeFile file(''first.keystore'') storePassword ''password'' } configSecond { keyAlias ''alias'' keyPassword ''password'' storeFile file(''second.keystore'') storePassword ''password'' } } compileSdkVersion 23 buildToolsVersion "23.0.2" defaultConfig { minSdkVersion 14 targetSdkVersion 23 } productFlavors{ flavor1 { applicationId "com.test.firstapp" } flavor2 { applicationId "com.test.secondapp" } } buildTypes { release { productFlavors.flavor1.signingConfig signingConfigs.configFirst productFlavors.flavor2.signingConfig signingConfigs.configSecond minifyEnabled true proguardFiles getDefaultProguardFile(''proguard-android.txt''), ''proguard-rules.pro'' } } }

buildTypes bloque buildTypes debe colocarse después de que bloque productFlavors , quiero decir que el orden es importante.


Según la guía del usuario , se admiten signingConfigs para sabores.

El problema aquí tiene que ver con el alcance del objeto signingConfigs. Acabo de asignarlo a una variable dentro del bloque flavor1 , pero fuera del bloque de sabor flavor1 para solucionar el problema:

productFlavors { def flavor1SigningVariable = signingConfigs.flavor1 flavor1 { ... signingConfig flavor1SigningVariable ... }