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