Jak utworzyć podpisany plik APK za pomocą interfejsu wiersza polecenia Cordova?
Zrobiłem przykładową aplikację o nazwie checkStatus
. Teraz chcę utworzyć podpisany plik APK. Więc mogę zainstalować go w różnych urządzeniach do testowania.
W tym celu wyszukałem w Googlach i znalazłem dokumentację.
Zgodnie z dokumentem, przełączyłem się do katalogu projektu i uruchomiłem następujące polecenie:
keytool -genkey -v -keystore key-name.keystore -alias alias-name -keyalg RSA -keysize 2048 -validity 10000
Po uruchomieniu powyższego polecenia, otrzymałem plik o nazwie key-name.keystore
W projectRoot/key-name.keystore
.
A następnie skopiowałem ten plik do projectRoot/platforms/android/key-name.keystore
.
Po tym, ja stworzył plik o nazwie ant.properties
i zapisał go w projectRoot/platforms/android
.
Napisałem następujący kod wewnątrz pliku:
key.store=projectRoot/key-name.keystore
key.alias=myApp
Po tym, uruchomiłem następujące polecenie, aby zwolnić
Cordova builds android --release
Wyrzuca następujący błąd:
/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)
Więc tym razem zmodyfikowałem key.store
wartość w pliku ant.properties
w następujący sposób.
key.store=/home/projectRoot/platforms/android/key-name.keystore
Ponownie uruchomiłem cordova build android --release
polecenie. Wyrzuca ten sam błąd.
8 answers
Krok 1:
D:\projects\Phonegap\Example> cordova plugin rm org.apache.cordova.console --save
Dodaj --save
, aby usunął wtyczkę z pliku config.xml
.
Krok 2:
Aby wygenerować release build dla Androida, musimy najpierw wprowadzić małą zmianę w pliku AndroidManifest.xml
znalezionym w platforms / android. Edycja pliku i zmiana linii:
<application android:debuggable="true" android:hardwareAccelerated="true" android:icon="@drawable/icon" android:label="@string/app_name">
I zmienić android:debuggable
na false
:
<application android:debuggable="false" android:hardwareAccelerated="true" android:icon="@drawable/icon" android:label="@string/app_name">
[24]}od cordova 6.2.0 usunąć android: debuggable tag całkowicie. Oto Wyjaśnienie z cordova:
Wyjaśnienie problemów typu " HardcodedDebugMode": Najlepiej jest pominąć atrybut Android: debuggable z manifestu. Jeśli to zrobisz, narzędzia automatycznie wstawią android: debuggable = true podczas budowania APK do debugowania na emulatorze lub urządzeniu. A kiedy ty wykonaj kompilację wydania, taką jak eksportowanie APK, zostanie ona automatycznie ustawiona to fałsz.
Jeśli z drugiej strony podasz określoną wartość w pliku manifestu, następnie narzędzia zawsze będą z niego korzystać. Może to prowadzić do przypadkowego opublikowania Twoja aplikacja z informacjami debugowania.
Krok 3:
Teraz możemy powiedzieć cordova, aby wygenerować naszą kompilację Wydania:
D:\projects\Phonegap\Example> cordova build --release android
Następnie możemy znaleźć nasz niepodpisany plik APK w platforms/android/ant-build
. W naszym przykładzie plik był platforms/android/ant-build/Example-release-unsigned.apk
Krok 4:
Notatka: mamy nasz keystore keystoreNAME-mobileapps.keystore
w tym Repo Git, jeśli chcesz utworzyć inny, wykonaj następujące kroki.
Klucz Generacja:
Składnia:
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
Następnie został wygenerowany Magazyn kluczy z nazwą jako nazwa-mobileapps.keystore
Krok 5:
Umieść wygenerowany keystore w
Stara wersja cordova
D:\projects\Phonegap\Example\platforms\android\ant-build
Nowa wersja cordova
D:\projects\Phonegap\Example\platforms\android\build\outputs\apk
Aby podpisać niepodpisany APK, uruchom narzędzie jarsigner, które jest również zawarte w JDK:
Składnia:
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
Lub
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'
To znaki apk na miejscu.
Krok 6:
Na koniec musimy uruchomić narzędzie ZIP align, aby zoptymalizować APK:
D:\projects\Phonegap\Example\platforms\android\ant-build> zipalign -v 4 Example-release-unsigned.apk Example.apk
Lub
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
Lub
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
Teraz mamy nasze ostateczne wydanie binarne o nazwie example.apk i możemy wydać to w Sklepie Google Play.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-06 12:52:10
[[4]}Aktualizacja do @malcubierre dla Cordova 4 (i Później) -
Utwórz plik o nazwie release-signing.properties
i umieść w APPFOLDER\platforms\android
folderze
Zawartość pliku: edit after = dla wszystkich z wyjątkiem 2. linii
storeFile=C:/yourlocation/app.keystore
storeType=jks
keyAlias=aliasname
keyPassword=aliaspass
storePassword=password
To polecenie powinno zbudować wersję release:
cordova build android --release
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-22 23:16:44
W bieżącej dokumentacji możemy określić kompilację.json z keystore:
{
"android": {
"debug": {
"keystore": "..\android.keystore",
"storePassword": "android",
"alias": "mykey1",
"password" : "password",
"keystoreType": ""
},
"release": {
"keystore": "..\android.keystore",
"storePassword": "",
"alias": "mykey2",
"password" : "password",
"keystoreType": ""
}
}
}
A następnie wykonaj commando za pomocą --buildConfig argumente, w ten sposób:
cordova run android --buildConfig
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-13 21:48:01
Krok 1:
Przejdź do cordova\platforms\android
Ant Utwórz plik o nazwie ant.properties
z informacją o pliku keystore (ten keystore może być wygenerowany z Twojego ulubionego zestawu SDK Android, studio...):
key.store=C:\\yourpath\\Yourkeystore.keystore
key.alias=youralias
Krok 2:
Przejdź do ścieżki cordova i wykonaj:
cordova build android --release
Uwaga: zostaniesz poproszony o podanie klucza i hasła
/ Align = "left" / apk pojawi się w\cordova\platforms\android\ant-build
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-20 14:16:49
W cordova 6.2.0 , ma łatwy sposób, aby utworzyć release build. zobacz inne kroki kroki 1, 2 i 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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:34:53
Na Mac (osx) wygenerowałem dwa pliki .sh, jeden do pierwszej publikacji, a drugi do aktualizacji:
#!/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
I aby zaktualizować swoją aplikację:
#!/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
Zakładając, że znajdujesz się w folderze domowym lub folderze uzupełniającym foldery aplikacji. Upewnij się, że poprawnie Ustawiłeś chmod, aby używać tego skryptu. Wtedy:
./ionicToApk.sh # or whatever depending of the name of your file, in CLI
Twój podpisany apk będzie w folderze aplikacji / platform/android / build/outputs/ apk / as SignedApk.apk Upewnij się, że używasz poprawnego aliasu kluczy i hasła zdefiniowanego przy pierwszym script
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-01 21:38:55
Najpierw sprawdź kod wersji i nazwę wersji, Jeśli aktualizujesz aplikację. I upewnij się, że masz poprzedni keystore.
Jeśli aktualizujesz aplikację, wykonaj krok 1,3,4.
Krok 1:
Goto projekt cordova do generowania naszego wydania budować:
D:\projects\Phonegap\Example> cordova build --release android
Następnie możemy znaleźć nasz niepodpisany plik APK w platforms / android / ant-build. W naszym przykładzie plik
If u used ant-build
yourproject/platforms/android/ant-build/Example-release-unsigned.apk
Lub
If u used gradle-build
yourProject/platforms/android/build/outputs/apk/Example-release-unsigned.apk
Krok 2:
Generowanie Klucza:
Składnia:
keytool -genkey -v -keystore <keystoreName>.keystore -alias <Keystore AliasName> -keyalg <Key algorithm> -keysize <Key size> -validity <Key Validity in Days>
Jeśli polecenie keytool nie rozpoznaje wykonaj ten krok
Sprawdź, czy katalog, w którym znajduje się plik wykonywalny keytool, znajduje się na twojej ścieżce. (Np. na moim komputerze z Windows 7 jest w C:\Program Files (x86) \ Java \ jre6 \ bin.)
Przykład:
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
Następnie został wygenerowany Magazyn kluczy z nazwą jako nazwa-mobileapps.keystore
Krok 3:
Umieść wygenerowany keystore w D:\projects\Phonegap\Example\platforms\android\ant-build
Aby podpisać niepodpisany APK, uruchom narzędzie jarsigner, które jest również zawarte w JDK:
Składnia:
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore <keystorename <Unsigned APK file> <Keystore Alias name>
Jeśli to nie rekonizuje wykonaj te kroki
(1) kliknij prawym przyciskiem myszy na "ten komputer" > kliknij prawym przyciskiem myszy Właściwości > Zaawansowane ustawienia systemowe > zmienne środowiskowe > wybierz ścieżkę, a następnie Edytuj.
(2) Dodaj ścieżkę do folderu JDK bin do zmiennych środowiskowych, to powinno wyglądać tak:
"C:\Program Files\Java \ jdk1.8.0_40\bin".
Przykład:
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'
To oznacza apk na miejscu.
Krok 4:
Na koniec musimy uruchomić narzędzie ZIP align, aby zoptymalizować APK:
If zipalign not recognize then
(1) Pobierz ścieżkę android sdk i znajdź zipalign jest to zwykle w android-sdk \ build-tools \ 23.0.3
(2) skopiuj plik zipalign wklej do wygenerowanego APK wydania folder zwykle w ścieżce poniżej
Yourproject / platforms / android/ant-build / Example-release-unsigned.apk
D:\projects\Phonegap\Example\platforms\android\ant-build> zipalign -v 4 Example-release-unsigned.apk Example.apk
Lub
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
Teraz mamy nasze ostateczne wydanie binarne o nazwie example.apk i możemy wydać to w Sklepie Google Play.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-05 05:09:48
Zbuduj plik APK Cordova release w cmd.
KEY STORE FILE PATH: keystore file path (F:/cordova/myApp/xxxxx.jks)
KEY STORE PASSWORD : xxxxx
Key STORE ALIAS : xxxxx
Key STORE ALIAS PASSWORD : xxxxx
/ align = "left" / exe : zipalign.ścieżka pliku exe (C:\Users\xxxx\AppData\Local\Android\sdk\build-tools\25.0.2\zipalign)
ANDROID UNSIGNED APK NAME : android-release-unsigned.apk
Android RELEASE nazwa APK : Android-release.apk
Uruchom poniższe kroki w cmd (Uruchom jako administrator)
-
[[35]}cordova build -- release android
- przejdź do android-release-unsigned.lokalizacja pliku apk (PROJECT\platforms\android\build\outputs\apk)
- jarsigner-verbose-sigalg SHA1withRSA-digestalg SHA1-keystore ścieżka do pliku przechowującego klucze> Android UNSIGNED APK NAME> sklep z kluczami ALIAS >
- / align = "left" / exe> - v 4 Android UNSIGNED APK NAME> Nazwa APK wydania Androida >
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-21 08:01:56