Ich habe eine Beispielanwendung mit dem Namen checkStatus
erstellt. Jetzt möchte ich eine signierte APK-Datei erstellen. So kann ich es in verschiedenen Geräten zu Testzwecken installieren.
Dafür habe ich gegoogelt und diese Dokumentation gefunden.
Gemäß dem Dokument habe ich zu meinem Projektverzeichnis gewechselt und den folgenden Befehl ausgeführt:
keytool -genkey -v -keystore key-name.keystore -alias alias-name -keyalg RSA -keysize 2048 -validity 10000
Nachdem ich den obigen Befehl ausgeführt hatte, erhielt ich eine Datei mit dem Namen key-name.keystore
bei projectRoot/key-name.keystore
.
Und dann habe ich diese Datei in projectRoot/platforms/Android/key-name.keystore
eingefügt.
Danach habe ich eine Datei mit dem Namen ant.properties
erstellt und in projectRoot/platforms/Android
gespeichert.
Ich habe den folgenden Code in die Datei geschrieben:
key.store=projectRoot/key-name.keystore
key.alias=myApp
Danach habe ich den folgenden Befehl ausgeführt, um ihn freizugeben
Cordova builds Android --release
Es wird der folgende Fehler ausgegeben:
/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)
Diesmal habe ich den key.store
-Wert in der ant.properties
-Datei wie folgt geändert.
key.store=/home/projectRoot/platforms/Android/key-name.keystore
Ich habe erneut den Befehl cordova build Android --release
ausgeführt. Es wirft den gleichen Fehler.
Kann mir jemand sagen, was ich falsch gemacht habe?
D:\projects\Phonegap\Example> cordova plugin rm org.Apache.cordova.console --save
fügen Sie den --save
hinzu, damit das Plugin aus der config.xml
-Datei entfernt wird.
Um einen Release-Build für Android zu erstellen, müssen Sie zunächst die AndroidManifest.xml
-Datei in Plattformen/Android ändern. Bearbeiten Sie die Datei und ändern Sie die Zeile:
<application Android:debuggable="true" Android:hardwareAccelerated="true" Android:icon="@drawable/icon" Android:label="@string/app_name">
und Android:debuggable
in false
ändern:
<application Android:debuggable="false" Android:hardwareAccelerated="true" Android:icon="@drawable/icon" Android:label="@string/app_name">
Ab Cordova 6.2.0 entfernen Sie den Android: debuggable-Tag vollständig. Hier ist die Erklärung von Cordova:
Erklärung für Probleme des Typs "HardcodedDebugMode": Es ist am besten, das Attribut Android: debuggable aus dem Manifest wegzulassen. In diesem Fall fügen die Tools automatisch Android ein: debuggable = true beim Erstellen einer APK zum Debuggen auf einem Emulator oder Gerät. Und wenn du Wenn Sie einen Release-Build ausführen, z. B. "APK exportieren", wird er automatisch festgelegt es ist falsch.
Wenn Sie dagegen einen bestimmten Wert in der Manifestdatei angeben, dann werden die Werkzeuge es immer verwenden. Dies kann zur versehentlichen Veröffentlichung von .__ führen. Ihre App mit Debug-Informationen.
Jetzt können wir Cordova sagen, dass es unseren Release-Build generieren soll:
D:\projects\Phonegap\Example> cordova build --release Android
Dann finden wir unsere nicht signierte APK-Datei in platforms/Android/ant-build
. In unserem Beispiel war die Datei platforms/Android/ant-build/Example-release-unsigned.apk
Hinweis: Wir haben unseren Schlüsselspeicher keystoreNAME-mobileapps.keystore
in diesem Git Repo. Wenn Sie einen weiteren erstellen möchten, fahren Sie mit den folgenden Schritten fort.
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
Dann wurde der Schlüsselspeicher mit dem Namen NAME-mobileapps.keystore erstellt
Platzieren Sie den generierten Schlüsselspeicher
alte Version Cordova
D:\projects\Phonegap\Example\platforms\Android\ant-build
Neue Version Cordova
D:\projects\Phonegap\Example\platforms\Android\build\outputs\apk
Führen Sie zum Signieren der nicht signierten APK das Jarsigner-Tool aus, das auch im JDK enthalten ist:
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'
Dies kennzeichnet den apk an Ort und Stelle.
Schließlich müssen wir das Zip-Ausrichtungs-Tool ausführen, um das APK zu optimieren:
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
Jetzt haben wir unsere letzte Binärversion namens example.apk und können diese im Google Play Store veröffentlichen.
Ein Update auf @malcubierre für Cordova 4 (und höher) -
Erstellen Sie eine Datei mit dem Namen release-signing.properties
und legen Sie sie im APPFOLDER\platforms\Android
-Ordner ab
Inhalt der Datei: edit after = für alle außer 2. Zeile
storeFile=C:/yourlocation/app.keystore
storeType=jks
keyAlias=aliasname
keyPassword=aliaspass
storePassword=password
Dann sollte dieser Befehl eine Release-Version erstellen:
cordova build Android --release
In der aktuellen Dokumentation können wir mit dem Schlüsselspeicher eine build.json angeben:
{
"Android": {
"debug": {
"keystore": "..\Android.keystore",
"storePassword": "Android",
"alias": "mykey1",
"password" : "password",
"keystoreType": ""
},
"release": {
"keystore": "..\Android.keystore",
"storePassword": "",
"alias": "mykey2",
"password" : "password",
"keystoreType": ""
}
}
}
Führen Sie dann das Kommando mit dem Argument --buildConfig folgendermaßen aus:
cordova run Android --buildConfig
Schritt 1:
Gehen Sie zu cordova\platforms\Android
und erstellen Sie eine Datei mit dem Namen ant.properties
-Datei mit den Informationen zur Keystore-Datei.
key.store=C:\\yourpath\\Yourkeystore.keystore
key.alias=youralias
Schritt 2:
Gehen Sie zum Cordova-Pfad und führen Sie Folgendes aus:
cordova build Android --release
Hinweis: Sie werden aufgefordert, Ihren Keystore und Ihr Schlüsselkennwort zu fragen
Eine YourApp-release.apk wird in \cordova\platforms\Android\ant-build
angezeigt.
In cordova 6.2.0 können Sie den Release-Build auf einfache Weise erstellen. beziehen sich auf andere Schritte hier Schritte 1, 2 und 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
Auf Mac (osx) habe ich zwei .sh-Dateien erstellt, eine für die erste Veröffentlichung und eine für die Aktualisierung:
#!/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
Und um Ihre App zu aktualisieren:
#!/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
Angenommen, Sie befinden sich in Ihrem privaten Ordner oder in einem Ordner, in dem sich Ihre Apps-Ordner befinden. Stellen Sie sicher, dass Sie chmod richtig eingestellt haben, um dieses Skript zu verwenden. Dann :
./ionicToApk.sh # or whatever depending of the name of your file, in CLI
Ihr signiertes apk befindet sich in Ihrem App-Ordner/Plattformen/Android/build/Outputs/apk/als SignedApk.apk Stellen Sie sicher, dass Sie den richtigen Schlüsselalias und das richtige Kennwort verwenden, die im ersten Skript definiert wurden
Überprüfen Sie zunächst Ihren Versionscode und den Versionsnamen, wenn Sie Ihre App aktualisieren. Stellen Sie sicher, dass Sie einen vorherigen Keystore haben.
Wenn Sie die App aktualisieren, folgen Sie den Schritten 1, 3, 4.
Gehe zu deinem Cordova-Projekt, um unseren Release-Build zu generieren:
D:\projects\Phonegap\Example> cordova build --release Android
Dann finden wir unsere nicht signierte APK-Datei in Plattformen/Android/ant-build. In unserem Beispiel war die Datei
wenn du Ant-Build benutzt hast
yourproject/platforms/Android/ant-build/Example-release-unsigned.apk
ODER
wenn du gradle-build benutzt hast
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>
wenn der Befehl keytool nicht erkannt wird, führen Sie diesen Schritt aus
Stellen Sie sicher, dass sich das Verzeichnis, in dem sich die ausführbare Datei von keytool befindet, in Ihrem Pfad befindet. (Auf meinem Windows 7-Computer ist dies beispielsweise in C:\Programme (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
Dann wurde der Schlüsselspeicher mit dem Namen NAME-mobileapps.keystore erstellt
Platzieren Sie den generierten Schlüsselspeicher in D:\projects\Phonegap\Beispiel\plattformen\Android\ant-build
Führen Sie zum Signieren der nicht signierten APK das Jarsigner-Tool aus, das auch im JDK enthalten ist:
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore <keystorename <Unsigned APK file> <Keystore Alias name>
Wenn dies nicht der Fall ist, führen Sie diese Schritte aus
(1) Klicken Sie mit der rechten Maustaste auf "Dieser PC". Klicken Sie mit der rechten Maustaste auf Eigenschaften> Erweiterte Systemeinstellungen> Umgebungsvariablen. Wählen Sie PATH und dann BEARBEITEN.
(2) Fügen Sie den Pfad des jdk bin-Ordners zu den Umgebungsvariablen hinzu. Dieser sollte folgendermaßen aussehen:
Msgstr "C:\Programme\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'
Dies kennzeichnet den apk an Ort und Stelle.
Schließlich müssen wir das Zip-Ausrichtungs-Tool ausführen, um das APK zu optimieren:
wenn zipalign dann nicht erkennt
(1) Gehen Sie zu Ihrem Android-SDK-Pfad und finden Sie zipalign, dass es normalerweise in Android-sdk\build-tools\23.0.3 ist
(2) Kopieren Sie die zipalign-Datei in Ihren generierten apk-Ordner (normalerweise unter dem Pfad)
ihr Projekt/Plattformen/Android/Ant-Build/Beispiel-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
Jetzt haben wir unsere letzte Binärversion namens example.apk und können diese im Google Play Store veröffentlichen.
##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
Erstellen Sie eine Cordova-Release-APK-Datei in cmd.
KEY STORE FILE PATH : Keystore-Dateipfad (F: /cordova/myApp/xxxxx.jks)
KEY STORE PASSWORD : xxxxx
KEY STORE ALIAS : xxxxx
KEY STORE ALIAS PASSWORT : xxxxx
PATH OF zipalign.exe : zipalign.exe-Dateipfad (C:\Benutzer\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
Führe die folgenden Schritte in cmd aus (als Administrator ausführen)