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

169

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 cherché sur Google et trouvé cette documentation .

Selon le document, je suis passé au 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.propertieset 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 lance 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, j'ai modifié la key.storevaleur dans le ant.propertiesfichier de la manière suivante.

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

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

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

Vasan
la source
3
à partir de cordova 5, le processus change un peu: ilee.co.uk/Sign-Releases-with-Cordova-Android/…
Sombriks

Réponses:

305

Étape 1:

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

ajoutez le --savepour qu'il supprime le plugin du config.xmlfichier.

Étape 2:

Pour générer une version de version pour Android, nous devons d'abord apporter une petite modification au AndroidManifest.xmlfichier trouvé dans plates-formes / android. Modifiez le fichier et changez la ligne:

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

et changer android:debuggablepour false:

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

Depuis cordova 6.2.0, supprimez complètement la balise android: debuggable. Voici l'explication de Cordova:

Explication pour les problèmes de type "HardcodedDebugMode": Il est préférable d'omettre l'attribut android: debuggable du manifeste. Si vous le faites, les outils insèrent automatiquement android: debuggable = true lors de la création d'un APK à déboguer sur un émulateur ou un appareil. Et lorsque vous effectuez une version de version, telle que l'exportation d'APK, elle le définira automatiquement sur false.

Si, au contraire, vous spécifiez une valeur spécifique dans le fichier manifeste, les outils l'utiliseront toujours. Cela peut entraîner la publication accidentelle de votre application avec des informations de débogage.

Étape 3:

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

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 étaitplatforms/android/ant-build/Example-release-unsigned.apk

Étape 4:

Remarque: nous avons notre keystore keystoreNAME-mobileapps.keystoredans ce Git Repo, si vous souhaitez en créer un autre, veuillez suivre les étapes suivantes.

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 fichier 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 l'APK non signé, exécutez l'outil jarsigner qui est é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

OU

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 exécuter l'outil d'alignement de zip pour optimiser l'APK:

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

OU

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

OU

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 binaire finale appelée example.apk et nous pouvons la publier sur le Google Play Store.

cfprabhu
la source
9
D'accord, j'accepte votre pensée. Mais j'ai un référentiel git privé et nous avons une équipe pour travailler sur l'application mobile. C'est donc confortable pour moi.
cfprabhu
5
Pourquoi était-il important de supprimer org.apache.cordova.console?
foreyez
5
@cfprabhu L'étape 5 lance un avertissement "Aucun -tsa ou -tsacert n'est fourni et ce fichier jar n'est pas horodaté.". Correction du problème en ajoutant "-tsa timestamp.digicert.com" à la commande. Pourrait être utile pour d'autres utilisateurs
Thomas Bormans
6
zipalign sous OSX est disponible à ~ / Library / Android / sdk / build-tools / 22.0.1 / zipalign
chillwalker
2
@ThomasBormans a en quelque sorte -tsa timestamp.digicert.comlancé une NullPointerException pour moi. -tsa http://timestamp.digicert.comsemble le réparer
Thomas
124

Une mise à jour de @malcubierre pour Cordova 4 (et versions ultérieures) -

Créer un fichier appelé release-signing.propertieset mettre dans un APPFOLDER\platforms\androiddossier

Contenu du fichier: modifier après = pour tous sauf 2ème ligne

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

Ensuite, cette commande devrait créer une version finale:

cordova build android --release
Jon
la source
2
Merci! Vous pouvez également modifier le nom / l'emplacement de votre fichier de propriétés, mais vous devez le spécifier dans un build-extras.gradlefichier. Document cordova pertinent ici .
Dunc
Mon application ne reçoit pas de mise à jour vers la prochaine version, première version créée dans ant build (cordova 3). J'ai mis à niveau mon cordova vers la version 6.0.0 maintenant que la deuxième version est créée dans la version gradle, j'ai suivi le dernier document cordova pour créer un apk signé mais mon application n'est toujours pas mise à jour. J'ai parcouru toutes les informations du Web, mais je me trompe toujours quelque part. S'il vous plaît, aidez-moi @Dunc
NGB
@Naveen J'utilise Cordova 5.2.0, j'ai eu divers problèmes avec d'autres versions> 5. Je vous suggère d' essayer si vous le pouvez. Ensuite, si des problèmes persistent, je recommande de poser une nouvelle question.
Dunc
Problème toujours, la nouvelle version d'apk n'est pas téléchargée à partir de l'application existante. @Dunc
NGB
@Dunc toute solution
NGB
52

Dans la documentation actuelle , nous pouvons spécifier un build.json avec le keystore:

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

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

cordova run android --buildConfig
infinito84
la source
2
Génial <3 votre réponse concerne les fichiers dont je peux contrôler la version!
gustavohenke
3
dans quel répertoire ce json doit-il exister?
Beelphegor
6
cordova build android --release
shadi
2
Placez le fichier build.json dans le dossier racine du projet avec le fichier keystore. C'est la méthode de signature la plus efficace et la plus simple que j'ai trouvée.
Joel Caton
1
Pour une raison quelconque, le chemin du fichier que j'ai dû changer en "../android.keystore". (barre oblique)
Dilhan Jayathilake
20

Étape 1:

Allez à cordova\platforms\androidet créez un ant.propertiesfichier appelé fille avec les informations du fichier de keystore (ce keystore peut être généré à partir de votre SDK Android préféré, studio ...):

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 fichier de clés et votre mot de passe clé

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

Malcubierre
la source
1
Voici la solution de travail: ilee.co.uk/Sign-Releases-with-Cordova-Android
redrom
5
à partir de cordova 5, le processus change un peu: ilee.co.uk/Sign-Releases-with-Cordova-Android/…
Sombriks
Avec Cordova 5, le fichier de nom "release-signing.properties" au lieu de "ant.properties"; toutes les autres étapes sont exactement comme décrit par @malcubierre
Mario Orlandi
La nouvelle version d'apk n'est pas téléchargée à partir de l'application existante dans cordova 6.0.0. J'ai suivi tous les documents toujours pas résolus mon problème pouvez-vous m'aider @MarioOrlandi
NGB
11

Dans cordova 6.2.0 , il dispose d'un moyen simple de créer une version de version. reportez-vous aux 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
KrIsHnA
la source
Je reçois une erreur d' The system cannot find the file specifiedutilisation de Cordova 6.2.0
mr5
avez-vous remplacé le chemin du keystore? Si tel est le cas, veuillez poster la commande ici.
KrIsHnA
Oui. C'estcordova build android --release -- --keystore="C:\release.keystore" --storePassword=****** --alias=mr5
mr5
1
Après avoir inclus mon mot de passe avec "(guillemets doubles), il a commencé à fonctionner. Je pense que Cordova a un problème avec l'analyse des caractères spéciaux.
mr5
Si quelqu'un utilise Ionic, vous pouvez consulter
Nguyen Tran
7

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 de départ 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 le dossier de votre application / plates-formes / android / build / sorties / apk / as SignedApk.apk Assurez-vous d'utiliser l'alias de clé et le mot de passe corrects définis avec le premier script

Ben
la source
2

Construisez le fichier APK de la version Cordova dans cmd.

CHEMIN DU FICHIER DU MAGASIN DE CLÉS : chemin du fichier du magasin de clés (F: /cordova/myApp/xxxxx.jks)

MOT DE PASSE DU MAGASIN CLÉ : xxxxx

ALIAS DU MAGASIN CLÉ : xxxxx

MOT DE PASSE ALIAS DU MAGASIN CLÉ : xxxxx

CHEMIN DE zipalign.exe : chemin du fichier zipalign.exe (C: \ Users \ 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écutez les étapes ci-dessous dans cmd (exécutez en tant qu'administrateur)

  1. cordova build - relâchez Android
  2. allez à l'emplacement du fichier android-release-unsigned.apk (PROJET \ plates-formes \ android \ build \ sorties \ apk)
  3. jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore <CHEMIN DU FICHIER DU MAGASIN DE CLÉS > < NOM DE L'APK NON SIGNÉ ANDROID > < ALIAS DU MAGASIN DE CLÉS >
  4. < CHEMIN DE zipalign.exe > -v 4 < ANDROID UNSIGNED APK NAME > < ANDROID RELEASE APK NAME >
Om Shankar
la source
1
##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
Nicolsondsouza
la source
0

Vérifiez d'abord votre code de version et votre nom de version si vous mettez à jour votre application. Et assurez-vous d'avoir un keystore précédent.

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

Étape 1:

Accédez à votre projet cordova pour générer notre version de version:

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

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

si vous avez utilisé la construction de fourmis

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

OU

si vous avez utilisé 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, procédez comme suit

Vérifiez que le répertoire dans lequel se trouve l'exécutable keytool se trouve sur votre chemin. (Par exemple, sur ma machine 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 fichier de clés généré dans D: \ projects \ Phonegap \ Example \ plates-formes \ android \ ant-build

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

Syntaxe:

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

S'il ne se reconstitue pas, procédez comme suit

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

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

"C: \ Program Files \ 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 exécuter l'outil d'alignement de zip pour optimiser l'APK:

si zipalign ne reconnaît pas alors

(1) Accédez au chemin de votre sdk android et trouvez zipalign, il se trouve généralement dans android-sdk \ build-tools \ 23.0.3

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

votreprojet / 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 

OU

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 binaire finale appelée example.apk et nous pouvons la publier sur le Google Play Store.

Arpit Patel
la source
0

Pour Windows, j'ai créé un build.cmdfichier:

(remplacez le chemin et l'alias du keystore)

Pour Cordova:

@echo off 
set /P spassw="Store Password: " && set /P kpassw="Key Password: " && cordova build android --release -- --keystore=../../local/my.keystore --storePassword=%spassw% --alias=tmpalias --password=%kpassw%

Et pour Ionic:

@echo off 
set /P spassw="Store Password: " && set /P kpassw="Key Password: " && ionic build --prod && cordova build android --release -- --keystore=../../local/my.keystore --storePassword=%spassw% --alias=tmpalias --password=%kpassw%

Enregistrez-le dans le répertoire du ptoject, vous pouvez double-cliquer ou l'ouvrir avec cmd.

ssz
la source