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.

Czy ktoś może mi powiedzieć, co zrobiłem źle?
Author: Flimzy, 2014-10-19

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.

 256
Author: cfprabhu,
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
 95
Author: Jon,
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
 39
Author: infinito84,
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
 18
Author: Martin Alcubierre Arenillas,
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
 11
Author: KrIsHnA,
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

 5
Author: Ben,
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.

 0
Author: Arpit Patel,
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
  1. przejdź do android-release-unsigned.lokalizacja pliku apk (PROJECT\platforms\android\build\outputs\apk)
  2. jarsigner-verbose-sigalg SHA1withRSA-digestalg SHA1-keystore ścieżka do pliku przechowującego klucze> Android UNSIGNED APK NAME> sklep z kluczami ALIAS >
  3. / align = "left" / exe> - v 4 Android UNSIGNED APK NAME> Nazwa APK wydania Androida >
 0
Author: Om Shankar,
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