La réponse acceptée utilise un fichier pour contrôler le fichier de clés à utiliser pour signer l'APK qui réside dans le même dossier racine du projet. Lorsque nous utilisons des vcs comme Git , cela pourrait être une mauvaise chose lorsque nous oublions d'ajouter le fichier de propriétés à la liste des ignorés. Parce que nous divulguerons notre mot de passe au monde. Les problèmes persistent.
Au lieu de créer le fichier de propriétés dans le même répertoire dans notre projet, nous devrions le créer à l'extérieur. Nous le faisons à l'extérieur en utilisant le fichier gradle.properties.
Voici les étapes:
1.Modifiez ou créez gradle.properties sur votre projet racine et ajoutez le code suivant, n'oubliez pas de modifier le chemin avec le vôtre:
AndroidProject.signing=/your/path/androidproject.properties
2.Créez androidproject.properties dans / votre / chemin / et ajoutez-y le code suivant, n'oubliez pas de changer /your/path/to/android.keystore en chemin de votre keystore:
STORE_FILE=/your/path/to/android.keystore
STORE_PASSWORD=yourstorepassword
KEY_ALIAS=yourkeyalias
KEY_PASSWORD=yourkeypassword
3.Dans votre module d'application build.gradle (pas la racine de votre projet build.gradle), ajoutez le code suivant s'il n'existe pas ou ajustez-le:
signingConfigs {
release
}
buildTypes {
debug {
debuggable true
}
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
}
4.Ajoutez le code suivant sous le code à l'étape 3:
if (project.hasProperty("AndroidProject.signing")
&& new File(project.property("AndroidProject.signing").toString()).exists()) {
def Properties props = new Properties()
def propFile = new File(project.property("AndroidProject.signing").toString())
if(propFile.canRead()) {
props.load(new FileInputStream(propFile))
if (props!=null && props.containsKey('STORE_FILE') && props.containsKey('STORE_PASSWORD') &&
props.containsKey('KEY_ALIAS') && props.containsKey('KEY_PASSWORD')) {
android.signingConfigs.release.storeFile = file(props['STORE_FILE'])
android.signingConfigs.release.storePassword = props['STORE_PASSWORD']
android.signingConfigs.release.keyAlias = props['KEY_ALIAS']
android.signingConfigs.release.keyPassword = props['KEY_PASSWORD']
} else {
println 'androidproject.properties found but some entries are missing'
android.buildTypes.release.signingConfig = null
}
} else {
println 'androidproject.properties file not found'
android.buildTypes.release.signingConfig = null
}
}
Ce code recherchera la propriété AndroidProject.signing dans gradle.properties à partir de l' étape 1 . Si la propriété est trouvée, elle traduira la valeur de la propriété en chemin de fichier pointant vers androidproject.properties que nous créons à l' étape 2 . Ensuite, toute la valeur de propriété de celle-ci sera utilisée comme configuration de signature pour notre build.gradle.
Maintenant, nous n'avons plus à nous inquiéter du risque d'exposer le mot de passe de notre keystore.
En savoir plus sur Signature de l'apk Android sans mettre les informations du keystore dans build.gradle
build.gradle
, vous devrez avoir autre chose quebuild.gradle
, si c'est un ajustement des variables d'environnement (pour une réponse), un fichier de propriétés (pour une autre réponse) ou d'autres moyens. Si vous ne souhaitez pas avoir des choses en dehors debuild.gradle
, alors par définition, toutes les informations de signature doivent être à l' intérieurbuid.gradle
.