Android Studio: comment générer un apk signé avec Gradle?

89

J'ai cherché sur Google et SO mais je ne trouve pas ma réponse.

C'est la première fois que je travaille avec le système Gradle et je suis maintenant sur le point de générer un APK signé à télécharger sur Google Play (le projet est importé depuis eclipse).

Maintenant, j'ai lu la partie ici http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Building-and-Tasks que vous devriez ajouter signingConfigsà votrebuild.gradle

J'ai ajouté ces lignes et maintenant j'ai vu que vous devez exécuter, ./gradlew assembleReleasemais l'exécuter dans mon cmd renvoie «gradle» n'est pas reconnu comme une commande interne ou externe, un programme exploitable ou un fichier de commandes. J'ai également essayé de cliquer avec le bouton droit sur le build.gradle et de l'exécuter, en disant que c'était réussi, mais une fois que je regarde dans le dossier build / apk, seul un fichier appeléapp-debug-unaligned.apk

Alors, comment générer l'apk signé en utilisant le système Gradle?

Gooey
la source
@ScottBarta a partiellement fait l'affaire, une fois que je suis passé en mode release et que j'ai exécuté le gradle, j'ai toujours eu une erreur, mais en utilisant he build> générer un apk signé via le menu, cela a finalement fonctionné! Merci, je vous ai voté pour le lien fourni.
Gooey
signer avec la version v1 (signature jar) ou v2 (signature apk complète) à partir du fichier gradle? solution ici: stackoverflow.com/questions/57943259/…
user1506104

Réponses:

97

Il existe trois façons de générer votre build selon le buildType. (Dans votre cas, c'est la libération, mais elle peut être nommée comme vous le souhaitez.)

  1. Accédez à Gradle Task dans le panneau de droite d'Android Studio et recherchez assembleReleaseou assemble(#your_defined_buildtype)sous Tâches du module

  2. Accédez à la variante de construction dans le panneau de gauche et sélectionnez la version dans la liste déroulante

  3. Accédez au répertoire racine du projet dans File Explorer et ouvrez cmd / terminal et exécutez:

    Linux: ./gradlew assembleRelease or assemble(#your_defined_buildtype)

    Les fenêtres: gradlew assembleRelease or assemble(#your_defined_buildtype)

Si vous voulez faire une version de version (uniquement), vous pouvez utiliser Build> Generate Signed apk. Pour les autres types de build, seules les trois options ci-dessus sont disponibles.

Vous pouvez trouver l'APK généré dans votre module/buildrépertoire contenant le nom du type de construction.

pyus13
la source
4
Cela ne construira un apk signé que si vous avez la configuration de construction dans votre build.gradle. Si vous le stockez dans des outils de gestion du code source ou le partagez avec d'autres personnes, vous devriez penser à séparer les informations d'identification de votre clé de signature de votre code source.
Janusz
Construire> Générer un apk signé ... c'est aussi simple que ça
Atul
61

Il est possible de prendre n'importe quel projet de gradle Android Studio existant et de le créer / 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:

./gradlew assembleRelease -Pandroid.injected.signing.store.file=$KEYFILE -Pandroid.injected.signing.store.password=$STORE_PASSWORD -Pandroid.injected.signing.key.alias=$KEY_ALIAS -Pandroid.injected.signing.key.password=$KEY_PASSWORD
Wayne Piekarski
la source
1
Étant donné que nous devons transmettre le code source au compagnon, c'est la meilleure façon de garder secret les éléments de notre keystore. Merci.
Yeung
2
de toute façon apprendre à connaître ces propriétés android.injected.signing. * existence?
Tixeon
J'ai obtenu ces informations de Xav de l'équipe Android Studio, et je ne sais pas s'il existe d'autres variables comme celle-ci.
Wayne Piekarski
Je reçois java.lang.RuntimeException: com.android.ide.common.signing.KeytoolException: Impossible de lire la clé XXXXXX du magasin "C: \ Users \ somedirectory \ Desktop \ someKey.jks": aucune clé avec l'alias 'XXXXXX' trouvé dans le fichier de clés C: \ Users \ somedirectory \ Desktop \ someKey.jks. Pourquoi donc?
Archie G. Quiñones
39

Vous pouvez utiliser ce code

android {
   ...
    signingConfigs {
        release {
            storeFile file("../your_key_store_file.jks")
            storePassword "some_password"
            keyAlias "alias_name"
            keyPassword "key_password"
        }
    }

    buildTypes {

        release {
            signingConfig signingConfigs.release
        }
    }
   ...
}

puis à partir de votre terminal exécutez

./gradlew assembleRelease

vous obtiendrez l'apk à

votre-application-android / build / sorties / apk / votre-application-android-release.apk

droidchef
la source
@ozcanovunc s'il vous plaît vérifier à nouveau le chemin de votre keystore peut être votre chemin mal défini.
bhavesh kaila
Lorsque vous faites cela, il y a de fortes chances que votre build.gradlesoit enregistré dans le contrôle de version, tout comme vos mots de passe! Envisagez de prendre une autre voie lorsque la sécurité est importante dans votre projet.
Marco7757
1
gradle assembleRelease ne fonctionne pas. Utiliser au lieu de gradlew assembleRelease
Sathish Gadde
-3

menu de construction> générer un apk signé

trickedoutdavid
la source
Si vous exécutez cela, cela vous indique que ce n'est pas la façon de procéder. De plus, si je télécharge ce fichier .apk, cela génère une erreur indiquant que les détections d'erreur ou quelque chose sont activés.
Gooey
11
il dit que le débogage est activé ... dans le studio Android, à gauche, il devrait y avoir un onglet qui dit `` variantes de construction '' ... cliquez dessus et passez tout de `` débogage '' à `` libération '' ... après cela , générer à nouveau un
apk
2
Cela ne fonctionne plus! Par exemple, l'APK qu'il génère a BuildConfig.DEBUG défini sur true. Cela ne m'a causé aucun problème, vous devez maintenant utiliser la méthode gradlew assembleRelease.
Ben Clayton
@BenClayton Vous avez absolument raison! J'ai perdu des heures à cause de ça! Un autre "bug" très ennuyeux dans Android Studio - Pas de fin en vue avec des problèmes ...
sjkm
Je me demande pourquoi cette étape simple ne peut pas être le moyen le plus approprié pour générer un apk signé comme il le mentionne clairement. Cette étape a généré une application et fonctionne parfaitement pour moi, sans aucun problème. Mais beaucoup d'autres réponses partout sur SO m'ont dérouté en pensant que ce que je faisais pourrait ne pas être correct ou quoi.
Atul