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
}
Hay una buena guía sobre esto: https://github.com/almalkawi/Android-Guide/wiki/Generating-signed-release-APK-using-Gradle
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