with variable studio para descargar configurar android build-automation gradle code-signing

android - studio - gradle set environment variable



LiberaciĆ³n de la firma en gradle.properties para Android (6)

Así que estoy tratando de convertir todos mis scripts de compilación ant en gradle, y he podido encontrar una gran cantidad de recursos y documentación en todos ellos, excepto cómo configurar el inicio de sesión en el archivo gradle.properties.

ant.properties lo hace así:

key.alias=alias key.store.password=password key.store=keystore.file key.alias.password=password

Pero, ¿cómo hago lo mismo en gradle?


En su archivo gradle.properties , almacene los mismos valores que en el archivo ant.properties , creo que tendrá que hacer nombres más simples, como keyAlias por ejemplo. Solo quita los puntos para estar seguro.

Luego, en tu archivo build.gradle , haz algo como esto:

android { signingConfigs { release } buildTypes { release { signingConfig signingConfigs.release } } } if (project.hasProperty(''keyAlias'')) { android.signingConfigs.release.keyAlias = keyAlias } // do the same for the three other properties // ...

Hacerlo de esta manera le brinda flexibilidad para construir en una computadora que tenga el archivo gradle.properties o no. La propiedad "keyalias" solo se lee si existe para que el código no falle si no está allí.

Si todas las propiedades están allí, la signingConfigs.release estará totalmente configurada y se usará para firmar la apk durante la compilación. Si no está allí, el APK se construirá pero no se firmará.


Gradle 1.9 no le permite definir propiedades. Puedes agregarlos solo a ext ahora. Pequeña adición a las respuestas anteriores:

signingConfigs { debug { project.ext.loadSign = false } release { project.ext.loadSign = true } } buildTypes { debug { signingConfig signingConfigs.debug } release { signingConfig signingConfigs.release } } if ( project.ext.loadSign ) { Properties p = new Properties () p.load ( new FileInputStream ( rootProject.file ( ''keys/sign.properties'' ) ) ) android.signingConfigs.release.storeFile file ( p.file ) android.signingConfigs.release.storePassword p.password android.signingConfigs.release.keyAlias p.alias android.signingConfigs.release.keyPassword p.keyPassword }



Inspirado por la solución de Eugens, se me ocurrió una variación un poco más corta. El código debe estar en la configuración de la tarea de Android {}.

File signFile = rootProject.file(''sign.properties'') if (signFile.exists()) { Properties p = new Properties() p.load(new FileInputStream(signFile)) signingConfigs { releaseConfig { storeFile file(p.storeFile) storePassword p.storePassword keyAlias p.keyAlias keyPassword p.keyPassword } } buildTypes.release.signingConfig signingConfigs.releaseConfig }


Mis requisitos eran que cualquier persona sin el almacén de claves pudiera construir correctamente. Esta es la forma más limpia que pude encontrar:

android { signingConfigs { release //Filled in readSigningConfigIfAvailable() } buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile(''proguard-android.txt''), ''proguard-xyz.txt'' readSigningConfigIfAvailable() } } } private void readSigningConfigIfAvailable() { if (hasAllSigningProperties()) { android.signingConfigs.release.storeFile = file(keystore_path) android.signingConfigs.release.storePassword = keystore_password android.signingConfigs.release.keyAlias = key_alias android.signingConfigs.release.keyPassword = key_password android.buildTypes.release.signingConfig = android.signingConfigs.release } else { android.buildTypes.release.signingConfig = null } } private boolean hasAllSigningProperties() { (hasProperty(''keystore_path'') && hasProperty(''keystore_password'') && hasProperty(''key_alias'') && hasProperty(''key_password'')) }


Pude hacerlo con lo siguiente. Probé la solución de @ Xav, pero se quejaría durante el paso de validación de la versión, si no tuviera las propiedades establecidas. Estoy seguro de que este es un cambio reciente debido a que el marco ha cambiado mucho. Solo quería ayudar al señalar que con la else al final, pude forzar el lanzamiento de firmando Config en nulo. Ahora las versiones firmadas y no firmadas se producen según la presencia de gradle.properties.

signingConfigs { release { keyAlias = "blue_sleep" } } buildTypes { release { signingConfig signingConfigs.release } } if (project.hasProperty(''storeFile'') && project.hasProperty(''storePassword'') && project.hasProperty(''keyPassword'')) { android.signingConfigs.release.storeFile = file(storeFile) android.signingConfigs.release.storePassword = storePassword android.signingConfigs.release.keyPassword = keyPassword } else { android.buildTypes.release.signingConfig = null }

Algunas otras notas útiles, puede poner gradle.properties en ~ / .gradle / si no desea que se encuentre en la carpeta del proyecto. También puede configurar la propiedad storeFile con una ruta absoluta como esta: storePath=file:///Users/nick/Dropbox/mycompany.keystore