web-dev-qa-db-fra.com

Comment créer un fichier APK signé à l'aide de l'interface de ligne de commande Cordova?

J'ai créé un exemple d'application nommé checkStatus. Maintenant, je veux créer un fichier APK signé. Je peux donc l'installer sur différents appareils pour mes tests.

Pour cela, j'ai googlé et trouvé ceci documentation .

Conformément au document, je suis passé dans le répertoire de mon projet et j'ai exécuté la commande suivante:

keytool -genkey -v -keystore key-name.keystore -alias alias-name -keyalg RSA -keysize 2048 -validity 10000

Après avoir exécuté la commande ci-dessus, j'ai obtenu un fichier nommé key-name.keystore à projectRoot/key-name.keystore.

Et puis j'ai copié-collé ce fichier dans projectRoot/platforms/Android/key-name.keystore.

Après cela, j'ai créé un fichier nommé ant.properties et l'ai enregistré dans projectRoot/platforms/Android.

J'ai écrit le code suivant dans le fichier:

key.store=projectRoot/key-name.keystore
key.alias=myApp

Après cela, j'ai exécuté la commande suivante pour libérer

Cordova builds Android --release

Il jette l'erreur suivante:

 /home/projectRoot/platforms/Android/cordova/node_modules/q/q.js:126
                throw e;
                      ^
Error code 1 for command: ant with args: release,-f,/home/projectRoot/platforms/Android/build.xml,-Dout.dir=ant-build,-Dgen.absolute.dir=ant-gen

 Error: /home/projectRoot/platforms/Android/cordova/build: Command failed with exit code 8
at ChildProcess.whenDone (/usr/lib/node_modules/cordova/node_modules/cordova-lib/src/cordova/superspawn.js:135:23)
at ChildProcess.EventEmitter.emit (events.js:98:17)
at maybeClose (child_process.js:753:16)
at Process.ChildProcess._handle.onexit (child_process.js:820:5)

Donc, cette fois-ci, j'ai modifié la valeur key.store dans le fichier ant.properties comme dans le cas suivant.

 key.store=/home/projectRoot/platforms/Android/key-name.keystore

Encore une fois, j'ai exécuté la commande cordova build Android --release. Il jette la même erreur.

Quelqu'un peut-il me dire ce que j'ai mal fait?

145
vasan

Étape 1:

D:\projects\Phonegap\Example> cordova plugin rm org.Apache.cordova.console --save

ajoutez le --save pour qu'il supprime le plugin du fichier config.xml.

Étape 2:

Pour générer une version validée pour Android, nous devons d’abord apporter une petite modification au fichier AndroidManifest.xml présent sur les plates-formes/Android. Editez le fichier et changez la ligne:

<application Android:debuggable="true" Android:hardwareAccelerated="true" Android:icon="@drawable/icon" Android:label="@string/app_name">

et remplacez Android:debuggable par false:

<application Android:debuggable="false" Android:hardwareAccelerated="true" Android:icon="@drawable/icon" Android:label="@string/app_name">

A partir de cordova 6.2.0, supprimez complètement la balise Android: debuggable. Voici l'explication de Cordova:

Explication sur les problèmes de type "HardcodedDebugMode": Il vaut mieux laisser de côté l'attribut Android: debuggable du manifeste . Si vous le faites, les outils inséreront automatiquement Android: debuggable = true lors de la création d'un fichier APK pour déboguer sur un émulateur ou un périphérique. Et quand tu effectuez une version validée, telle que Exporter APK, elle sera automatiquement définie c'est faux.

Si, par contre, vous spécifiez une valeur spécifique dans le fichier manifeste, alors les outils l'utiliseront toujours. Cela peut conduire à une publication accidentelle votre application avec des informations de débogage.

Étape 3:

Nous pouvons maintenant dire à Cordova de générer notre version de compilation:

D:\projects\Phonegap\Example> cordova build --release Android

Ensuite, nous pouvons trouver notre fichier APK non signé dans platforms/Android/ant-build. Dans notre exemple, le fichier était platforms/Android/ant-build/Example-release-unsigned.apk

Étape 4:

Remarque: nous avons notre fichier de clés keystoreNAME-mobileapps.keystore dans ce dépôt Git. Si vous souhaitez en créer un autre, procédez comme suit.

Génération de clé:

Syntaxe:

keytool -genkey -v -keystore <keystoreName>.keystore -alias <Keystore AliasName> -keyalg <Key algorithm> -keysize <Key size> -validity <Key Validity in Days>

Egs:

keytool -genkey -v -keystore NAME-mobileapps.keystore -alias NAMEmobileapps -keyalg RSA -keysize 2048 -validity 10000


keystore password? : xxxxxxx
What is your first and last name? :  xxxxxx
What is the name of your organizational unit? :  xxxxxxxx
What is the name of your organization? :  xxxxxxxxx
What is the name of your City or Locality? :  xxxxxxx
What is the name of your State or Province? :  xxxxx
What is the two-letter country code for this unit? :  xxx

Ensuite, le magasin de clés a été généré avec le nom NAME-mobileapps.keystore.

Étape 5:

Placez le magasin de clés généré dans

ancienne version cordova

D:\projects\Phonegap\Example\platforms\Android\ant-build

Nouvelle version cordova

D:\projects\Phonegap\Example\platforms\Android\build\outputs\apk

Pour signer le fichier APK non signé, exécutez l'outil jarsigner, également inclus dans le JDK:

Syntaxe:

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore <keystorename> <Unsigned APK file> <Keystore Alias name>

Egs:

D:\projects\Phonegap\Example\platforms\Android\ant-build> jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore NAME-mobileapps.keystore Example-release-unsigned.apk xxxxxmobileapps

OR

D:\projects\Phonegap\Example\platforms\Android\build\outputs\apk> jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore NAME-mobileapps.keystore Example-release-unsigned.apk xxxxxmobileapps

Enter KeyPhrase as 'xxxxxxxx'

Cela signe l'apk en place.

Étape 6:

Enfin, nous devons utiliser l'outil d'alignement Zip pour optimiser l'APK:

D:\projects\Phonegap\Example\platforms\Android\ant-build> zipalign -v 4 Example-release-unsigned.apk Example.apk 

OR

D:\projects\Phonegap\Example\platforms\Android\ant-build> C:\Phonegap\adt-bundle-windows-x86_64-20140624\sdk\build-tools\Android-4.4W\zipalign -v 4 Example-release-unsigned.apk Example.apk

OR

D:\projects\Phonegap\Example\platforms\Android\build\outputs\apk> C:\Phonegap\adt-bundle-windows-x86_64-20140624\sdk\build-tools\Android-4.4W\zipalign -v 4 Example-release-unsigned.apk Example.apk

Nous avons maintenant notre version finale binaire appelée example.apk que nous pouvons publier sur Google Play Store.

268
cfprabhu

Mise à jour de @malcubierre pour Cordova 4 (et ultérieur) - 

Créez un fichier appelé release-signing.properties et mettez-le dans le dossier APPFOLDER\platforms\Android

Contenu du fichier: edit after = pour tous sauf 2ème ligne

storeFile=C:/yourlocation/app.keystore
storeType=jks
keyAlias=aliasname
keyPassword=aliaspass
storePassword=password

Ensuite, cette commande devrait construire une version:

cordova build Android --release
104
Jon

Dans le documentation actuel, nous pouvons spécifier un build.json avec le magasin de clés:

{
     "Android": {
         "debug": {
             "keystore": "..\Android.keystore",
             "storePassword": "Android",
             "alias": "mykey1",
             "password" : "password",
             "keystoreType": ""
         },
         "release": {
             "keystore": "..\Android.keystore",
             "storePassword": "",
             "alias": "mykey2",
             "password" : "password",
             "keystoreType": ""
         }
     }
 }

Et ensuite, exécutez le commando avec --buildConfig argumente, de cette façon:

cordova run Android --buildConfig
47
infinito84

Étape 1:  

Allez à cordova\platforms\Android et créez un fichier appelé ant.properties avec les informations de fichier de clés (ce fichier de clés peut être généré à partir de votre SDK Android, studio ...) favori:

key.store=C:\\yourpath\\Yourkeystore.keystore
key.alias=youralias

Étape 2:

Allez sur le chemin cordova et exécutez:

cordova build Android --release

Remarque: Vous serez invité à demander votre magasin de clés et votre mot de passe.

Un YourApp-release.apk apparaîtra dans \cordova\platforms\Android\ant-build

Dans cordova 6.2.0, il est facile de créer une version release. Reportez-vous à d'autres étapes ici Étapes 1, 2 et 4

cd cordova/ #change to root cordova folder
platforms/Android/cordova/clean #clean if you want
cordova build Android --release -- --keystore="/path/to/keystore" --storePassword=password --alias=alias_name #password will be prompted if you have any
11
KrIsHnA

Sur Mac (osx), j'ai généré deux fichiers .sh, un pour la première publication et un autre pour la mise à jour:

#!/bin/sh
echo "Ionic to Signed APK ---- [email protected] // Benjamin Rathelot\n"
printf "Project dir : "
read DIR
printf "Project key alias : "
read ALIAS
cd $DIR/
cordova build --release Android
cd platforms/Android/build/outputs/apk/
keytool -genkey -v -keystore my-release-key.keystore -alias $ALIAS -keyalg RSA -keysize 2048 -validity 10000
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keystore Android-release-unsigned.apk $ALIAS
zipalign -v 4 Android-release-unsigned.apk signedApk.apk

Et pour mettre à jour votre application:

#!/bin/sh
echo "Ionic to Signed APK ---- [email protected] // Benjamin Rathelot\n"
printf "Project dir : "
read DIR
printf "Project key alias : "
read ALIAS
cd $DIR/
cordova build --release Android
cd platforms/Android/build/outputs/apk/
rm signedApk.apk
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keystore Android-release-unsigned.apk $ALIAS
zipalign -v 4 Android-release-unsigned.apk signedApk.apk

En supposant que vous soyez dans votre dossier personnel ou dans un dossier en tête de vos dossiers d'applications. Assurez-vous de configurer correctement chmod pour utiliser ce script. Ensuite :

./ionicToApk.sh # or whatever depending of the name of your file, in CLI

Votre apk signé sera dans votre dossier/plateformes/Android/build/output/apk/as SignedApk.apk Assurez-vous d'utiliser le bon alias de clé et le mot de passe définis avec le premier script

6
Ben

Commencez par vérifier votre code de version et votre nom de version si vous mettez à jour votre application. Et assurez-vous que vous avez un magasin de clés précédent.

Si vous mettez à jour l'application, suivez l'étape 1,3,4. 

Étape 1:

Allez à votre projet Cordova pour générer notre version de sortie:

D:\projects\Phonegap\Example> cordova build --release Android

Ensuite, nous pouvons trouver notre fichier APK non signé dans plateformes/Android/ant-build. Dans notre exemple, le fichier était

si vous avez utilisé ant-build

yourproject/platforms/Android/ant-build/Example-release-unsigned.apk

OU

si tu utilisais gradle-build

yourProject/platforms/Android/build/outputs/apk/Example-release-unsigned.apk

Étape 2:

Génération de clé:

Syntaxe:

keytool -genkey -v -keystore <keystoreName>.keystore -alias <Keystore AliasName> -keyalg <Key algorithm> -keysize <Key size> -validity <Key Validity in Days>

si la commande keytool ne reconnaît pas cette étape 

Vérifiez que le répertoire dans lequel se trouve l'exécutable keytool est sur votre chemin. (Par exemple, sur mon ordinateur Windows 7, il se trouve dans C:\Program Files (x86)\Java\jre6\bin.)

Exemple:

keytool -genkey -v -keystore NAME-mobileapps.keystore -alias NAMEmobileapps -keyalg RSA -keysize 2048 -validity 10000


keystore password? : xxxxxxx
What is your first and last name? :  xxxxxx
What is the name of your organizational unit? :  xxxxxxxx
What is the name of your organization? :  xxxxxxxxx
What is the name of your City or Locality? :  xxxxxxx
What is the name of your State or Province? :  xxxxx
What is the two-letter country code for this unit? :  xxx

Ensuite, le magasin de clés a été généré avec le nom NAME-mobileapps.keystore.

Étape 3:

Placez le magasin de clés généré dans D:\projects\Phonegap\Example\plates-formes\Android\ant-build

Pour signer le fichier APK non signé, exécutez l'outil jarsigner, également inclus dans le JDK:

Syntaxe:

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore <keystorename <Unsigned APK file> <Keystore Alias name>

Si cela ne se reconnaît pas, suivez ces étapes 

(1) Faites un clic droit sur "Ce PC"> cliquez avec le bouton droit de la souris sur Propriétés> Paramètres système avancés> Variables d'environnement> sélectionnez CHEMIN, puis ÉDITER.

(2) Ajoutez votre chemin de dossier jdk bin aux variables d'environnement, il devrait ressembler à ceci:

"C:\Programmes\Java\jdk1.8.0_40\bin".

Exemple:

D:\projects\Phonegap\Example\platforms\Android\ant-build> jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore NAME-mobileapps.keystore Example-release-unsigned.apk xxxxxmobileapps

Enter KeyPhrase as 'xxxxxxxx'

Cela signe l'apk en place.

Étape 4:

Enfin, nous devons utiliser l'outil d'alignement Zip pour optimiser l'APK:

si zipalign ne reconnaît pas alors 

(1) Allez dans votre chemin sdk Android et trouvez zipalign c'est généralement dans Android-sdk\build-tools\23.0.3 

(2) Copiez le fichier zipalign dans le dossier apk de votre génération, généralement dans le chemin ci-dessous.

votre projet/plates-formes/Android/ant-build/Example-release-unsigned.apk

D:\projects\Phonegap\Example\platforms\Android\ant-build> zipalign -v 4 Example-release-unsigned.apk Example.apk 

OR

D:\projects\Phonegap\Example\platforms\Android\ant-build> C:\Phonegap\adt-bundle-windows-x86_64-20140624\sdk\build-tools\Android-4.4W\zipalign -v 4 Example-release-unsigned.apk Example.apk

Nous avons maintenant notre version finale binaire appelée example.apk que nous pouvons publier sur Google Play Store.

0
Arpit Patel
##Generated signed apk from commandline
#variables
APP_NAME=THE_APP_NAME
APK_LOCATION=./
APP_HOME=/path/to/THE_APP
APP_KEY=/path/to/Android_key
APP_KEY_ALIAS=the_alias
APP_KEY_PASSWORD=123456789
zipalign=$Android_HOME/build-tools/28.0.3/zipalign

#the logic
cd $APP_HOME
cordova build --release Android
cd platforms/Android/app/build/outputs/apk/release
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore $APP_KEY ./app-release-unsigned.apk $APP_KEY_ALIAS <<< $APP_KEY_PASSWORD
rm -rf "$APK_LOCATION/$APP_NAME.apk"
$zipalign -v 4 ./app-release-unsigned.apk "$APK_LOCATION/$APP_NAME.apk"
open $APK_LOCATION
#the end
0
nicolsondsouza

Build cordova release APK Fichier dans cmd.

CHEMIN DE FICHIER MAGASIN DE CLÉS : chemin du fichier de stockage (F: /cordova/myApp/xxxxx.jks)

MOT DE PASSE KEY STORE : xxxxx

MAGASIN DE CLÉS ALIAS : xxxxx

KEY STORE ALIAS PASSWORD : xxxxx

CHEMIN DE zipalign.exe : chemin du fichier zipalign.exe (C:\Utilisateurs\xxxx\AppData\Local\Android\sdk\build-tools\25.0.2\zipalign)

Android UNSIGNED APK NAME : Android-release-unsigned.apk

Android RELEASE APK NAME : Android-release.apk

Exécuter ci-dessous les étapes dans cmd (exécuter en tant qu'administrateur)

  1. cordova build - libérer Android
  2. accédez à l'emplacement du fichier Android-release-unsigned.apk (PROJECT\plateformes\Android\build\output\apk).
  3. jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore < CHEMIN DE FICHIER MAGASIN CLÉ > < Android UNSIGNED APK NOM > < MAGASIN CLÉ ALIAS >
  4. < CHEMIN DE zipalign.exe > -v 4 < Android UNSIGNED APK NAME > < Android RELEASE APK NAME >
0
Om Shankar