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?
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
.
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.
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
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.
keytool -genkey -v -keystore <keystoreName>.keystore -alias <Keystore AliasName> -keyalg <Key algorithm> -keysize <Key size> -validity <Key Validity in Days>
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.
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:
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore <keystorename> <Unsigned APK file> <Keystore Alias name>
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.
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.
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
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
É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
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
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.
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
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.)
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.
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:
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".
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.
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.
##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
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)