J'essaie de configurer le processus de signature afin que le mot de passe du fichier de clés et le mot de passe clé ne soient pas stockés dans le build.gradle
fichier du projet .
Actuellement, j'ai ce qui suit dans le build.gradle
:
android {
...
signingConfigs {
release {
storeFile file("my.keystore")
storePassword "store_password"
keyAlias "my_key_alias"
keyPassword "key_password"
}
}
buildTypes {
release {
signingConfig signingConfigs.release
}
}
}
Cela fonctionne parfaitement mais je ne dois pas mettre les valeurs pour le storePassword
, et keyPassword
dans mon référentiel. Je préférerais ne pas mettre storeFile
et keyAlias
là non plus.
Existe-t-il un moyen de modifier le build.gradle
afin qu'il obtienne les mots de passe d'une source externe (comme un fichier résidant uniquement sur mon ordinateur)?
Et bien sûr, le modifié build.gradle
devrait être utilisable sur n'importe quel autre ordinateur (même si l'ordinateur n'a pas accès aux mots de passe).
J'utilise Android Studio et Mac OS X Maverics si cela compte.
la source
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
.Réponses:
La bonne chose à propos de Groovy est que vous pouvez librement mélanger du code Java, et il est assez facile à lire dans un fichier clé / valeur en utilisant
java.util.Properties
. Il existe peut-être un moyen encore plus simple d'utiliser Groovy idiomatique, mais Java est toujours assez simple.Créez un
keystore.properties
fichier (dans cet exemple, dans le répertoire racine de votre projet à côté desettings.gradle
, bien que vous puissiez le placer où vous le souhaitez:Ajoutez ceci à votre
build.gradle
:la source
storeFile file('AndroidManifest.xml')
), puis sa substitution ultérieure provoque le processus de signature.Error:(24, 0) Could not find property 'android' on root project 'RootProjectName'
où la ligne 24 est celle avec le bloc if. L'ajoutapply plugin: 'com.android.application'
à la racine build.gradle permet également à la construction d'échouer. Qu'est-ce que je fais mal?Could not get unknown property 'android' for root project
Alternativement, si vous souhaitez appliquer la réponse de Scott Barta d'une manière plus similaire au code de gradle généré automatiquement, vous pouvez créer un
keystore.properties
fichier dans le dossier racine de votre projet:et modifiez votre code de note pour:
Vous pouvez stocker ce fichier de propriétés à la racine de votre module, auquel cas omettez simplement
rootProject
, et vous pouvez également modifier ce code pour avoir plusieurs ensembles de propriétés pour différents keystores et alias de clé.la source
if ( keystorePropertiesFile.exists() )
de m'assurer que le fichier est présent avant d'essayer d'obtenir les attributs et d'essayer de signer..txt
extension à la fin dukeystore.properties
fichier..txt
extension sur lekeystore.properties
fichier.Le moyen le plus simple est de créer un
~/.gradle/gradle.properties
fichier.Ensuite, votre
build.gradle
fichier peut ressembler à ceci:la source
Après avoir lu quelques liens:
http://blog.macromates.com/2006/keychain-access-from-shell/ http://www.thoughtworks.com/es/insights/blog/signing-open-source-android-apps-without-disclosing- mots de passe
Puisque vous utilisez Mac OSX, vous pouvez utiliser l'accès au trousseau pour stocker vos mots de passe.
Puis dans vos scripts gradle:
Utilisez comme ceci:
la source
Voilà comment je fais. Utiliser des variables d'environnement
la source
Neither path nor baseDir may be null or empty string. path='null'
Il est possible de prendre n'importe quel projet de gradle Android Studio existant et de le construire / signer à partir de la ligne de commande sans modifier aucun fichier. Cela le rend très agréable pour stocker votre projet dans le contrôle de version tout en gardant vos clés et mots de passe séparés et non dans votre fichier build.gradle:
la source
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:
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:
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:
4.Ajoutez le code suivant sous le code à l'étape 3:
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
la source
Pour ceux qui cherchent à mettre leurs informations d'identification dans un fichier JSON externe et à le lire à partir du gradle, voici ce que j'ai fait:
mon_projet / credentials.json:
mon_projet / android / app / build.gradle
La raison pour laquelle j'ai choisi un
.json
type de fichier, et non un.properties
type de fichier (comme dans la réponse acceptée), est que je voulais également stocker d'autres données (d'autres propriétés personnalisées dont j'avais besoin) dans ce même fichier (my_project/credentials.json
), tout en continuant à analyser progressivement le signer également des informations à partir de ce fichier.la source
Cette question a reçu de nombreuses réponses valides, mais je voulais partager mon code qui peut être utile pour les responsables de la bibliothèque , car il laisse l'original
build.gradle
assez propre .J'ajoute un dossier au répertoire du module que je
gitignore
. Cela ressemble à ceci:keystore.jks
etsigning.properties
devrait être explicite. Etsigning.gradle
ressemble à ceci:Et l'original
build.gradle
Comme vous pouvez le voir, vous n'avez pas du tout à spécifier les buildTypes, si l'utilisateur a accès à un
signing
répertoire valide , il le met simplement dans le module et il peut créer une application de version signée valide, sinon cela fonctionne juste pour lui comme ce serait normalement le cas.la source
apply from
devrait venir après leandroid
blocVous pouvez demander des mots de passe à partir de la ligne de commande:
Cette réponse est apparue précédemment: https://stackoverflow.com/a/33765572/3664487
la source
Mon mot de passe contenait un caractère spécial dont le signe dollar $ et je devais l'échapper dans le fichier gradle.properties. Après cela, la signature a fonctionné pour moi.
la source