with Liberación de la firma en gradle.properties para Android




install gradle with sdkman (5)

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
}

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?


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
}

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


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





code-signing