Cordova komut satırı arabirimini kullanarak imzalı bir APK dosyası nasıl oluşturulur?


169

Adlı örnek bir uygulama yaptım checkStatus. Şimdi imzalı bir APK dosyası oluşturmak istiyorum. Bu yüzden test için farklı cihazlara kurabilirim.

Bunun için Google'ı aradım ve bu dokümanları buldum .

Belgeye göre proje dizinime geçtim ve aşağıdaki komutu çalıştırdım:

keytool -genkey -v -keystore key-name.keystore -alias alias-name -keyalg RSA -keysize 2048 -validity 10000

Yukarıdaki komutu kaçtıktan sonra ben adlı bir dosya var key-name.keystoreen projectRoot/key-name.keystore.

Ve sonra bu dosyayı kopyaladım projectRoot/platforms/android/key-name.keystore.

Bundan sonra, adlı bir dosya oluşturdum ant.propertiesve içine kaydettim projectRoot/platforms/android.

Aşağıdaki kodu dosyaya yazdım:

key.store=projectRoot/key-name.keystore
key.alias=myApp

Bundan sonra, serbest bırakmak için aşağıdaki komutu çalıştırdım

Cordova builds android --release

Aşağıdaki hatayı veriyor:

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

Bu sefer, dosyadaki key.storedeğeri ant.propertiesaşağıdaki gibi değiştirdim .

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

cordova build android --releaseKomutu yine çalıştırdım . Aynı hatayı atar.

Biri bana neyi yanlış yaptığımı söyleyebilir mi?


3
cordova 5 ile başlayarak, süreç biraz değişiyor: ilee.co.uk/Sign-Releases-with-Cordova-Android/…
Sombriks

Yanıtlar:


305

Aşama 1:

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

eklentiyi dosyadan --savekaldıracak şekilde ekleyin config.xml.

Adım 2:

Android için bir sürüm oluşturma oluşturmak için önce AndroidManifest.xmlplatformlarda / android'de bulunan dosyada küçük bir değişiklik yapmamız gerekiyor . Dosyayı düzenleyin ve satırı değiştirin:

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

ve değişim android:debuggableiçin false:

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

Cordova 6.2.0'dan itibaren android: hata ayıklama etiketini tamamen kaldırın. İşte cordova'dan açıklama:

"HardcodedDebugMode" türü sorunların açıklaması: En iyisi android: debuggable niteliğini manifest'ten çıkarmaktır. Bunu yaparsanız, araçlar bir taklitçide veya cihazda hata ayıklamak için bir APK oluştururken android'i otomatik olarak ekler: debuggable = true. Ve APK'yi Dışa Aktarma gibi bir sürüm derlemesi gerçekleştirdiğinizde, otomatik olarak false değerine ayarlanır.

Öte yandan manifest dosyasında belirli bir değer belirtirseniz, araçlar her zaman onu kullanır. Bu, uygulamanızı yanlışlıkla hata ayıklama bilgileriyle yayınlamanıza neden olabilir.

Aşama 3:

Şimdi cordova'ya sürüm yapımızı oluşturmasını söyleyebiliriz:

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

Ardından, imzalanmamış APK dosyamızı bulabiliriz platforms/android/ant-build. Örneğimizde, dosyaplatforms/android/ant-build/Example-release-unsigned.apk

4. Adım:

Not: keystoreNAME-mobileapps.keystoreBu Git Repo'da anahtar depomuz var , başka bir tane oluşturmak istiyorsanız, lütfen aşağıdaki adımlarla devam edin.

Anahtar Üretimi:

Sözdizimi:

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

Ardından NAME-mobileapps.keystore adıyla Anahtar deposu oluşturuldu

Adım 5:

Oluşturulan anahtar deposunu

eski sürüm cordova

D:\projects\Phonegap\Example\platforms\android\ant-build

Yeni sürüm cordova

D:\projects\Phonegap\Example\platforms\android\build\outputs\apk

İmzasız APK'yı imzalamak için, JDK'da bulunan jarsigner aracını çalıştırın:

Sözdizimi:

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

VEYA

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'

Bu, apk'yi yerinde imzalar.

6. Adım:

Son olarak, APK'yı optimize etmek için zip hizalama aracını çalıştırmamız gerekiyor:

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

VEYA

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

VEYA

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

Şimdi example.apk adlı son sürüm ikili dosyamız var ve bunu Google Play Store'da yayınlayabiliriz.


9
Tamam, düşüncelerini kabul ediyorum. Ama özel git depom var ve mobil uygulama üzerinde çalışmak için bir ekibimiz var. Bu yüzden benim için rahat.
cfprabhu

5
Org.apache.cordova.console kaldırmak neden önemliydi?
foreyez

5
@cfprabhu 5. Adım "-tsa veya -tsacert yok ve bu kavanoz zaman damgası yok" uyarısı veriyor. Komuta "-tsa timestamp.digicert.com" ekleyerek düzeltildi. Diğer kullanıcılar için yararlı olabilir
Thomas Bormans

6
OSX altında zipalign ~ / Library / Android / sdk / build-tools / 22.0.1 / zipalign
chillwalker

2
@ ThomasBormans bir şekilde -tsa timestamp.digicert.combenim için bir NullPointerException oluşturdu. -tsa http://timestamp.digicert.comdüzeltmek gibi görünüyor
Thomas

124

Cordova 4 (ve üstü) için @malcubierre'de bir güncelleme -

Adlı bir dosya oluşturun release-signing.propertiesve ekleyin APPFOLDER\platforms\android klasöre

Dosyanın içeriği: edit after = 2. satır hariç tümü için

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

Sonra bu komut bir yayın sürümü oluşturmalıdır:

cordova build android --release

2
Teşekkürler! Özellikler dosyanızın adını / konumunu da değiştirebilirsiniz, ancak bir build-extras.gradledosyada belirtmeniz gerekir . İlgili cordova doktoru burada .
Dunc

Benim app sonraki sürüm, karınca yapı (cordova 3) oluşturulan ilk sürümü güncelleme almıyor. Kepçe yapımımı 6.0.0'a yükselttim, şimdi ikinci sürüm, gradle derlemesinde oluşturuldu, imzalı apk oluşturmak için en son cordova doc'ı izledim, ancak yine de uygulamam güncellenmiyor. Web'in tüm bilgilerini geçtim ama yine de bir yerlerde yanlış gidiyorum. Lütfen bana yardım et @Dunc
NGB

@Naveen Cordova 5.2.0 kullanıyorum, diğer sürümlerle> 5 çeşitli sorunlar yaşadım. Yapabiliyorsanız bunu denemenizi öneririz. Ardından, hala sorun yaşıyorsanız, yeni bir soru sormanızı öneririm.
Dunc

Hâlâ sorun yaşıyor, apk'nin yeni sürümü mevcut uygulamadan indirilmiyor. @Dunc
NGB

@ Herhangi bir çözüm
NGB

52

Mevcut belgelerde anahtar deposuyla bir build.json belirtebiliriz:

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

Ve sonra, komandoyu --buildConfig argumente ile şu şekilde yürütün:

cordova run android --buildConfig

2
Awesome <3 Cevabınız sürüm kontrolü yapabileceğiniz dosyalar hakkında!
gustavohenke

3
bu json hangi dizinde bulunmalı?
Beelphegor

6
cordova build android - yayın
shadi

2
Build.json dosyasını anahtar deposu dosyasıyla birlikte kök proje klasörüne yerleştirin. Bu, bulduğum imzalama için en etkili sorunsuz yöntemdir.
Joel Caton

1
Nedense dosya yolunu "../android.keystore" olarak değiştirmek zorunda kaldım. (eğik çizgi)
Dilhan Jayathilake

20

Aşama 1:

Anahtar deposunun dosya bilgileriyle dosya cordova\platforms\androidadı verilen bir ant.propertiesdosya oluşturmak için karıncaya gidin (bu anahtar deposu en sevdiğiniz Android SDK, stüdyodan oluşturulabilir ...):

key.store=C:\\yourpath\\Yourkeystore.keystore
key.alias=youralias

Adım 2:

Cordova yoluna gidin ve yürütün:

cordova build android --release

Not: Anahtar deponuzu ve anahtar şifrenizi sormanız istenecektir

Bir YourApp-release.apk dosyası \cordova\platforms\android\ant-build


1
İşte çalışma çözümü: ilee.co.uk/Sign-Releases-with-Cordova-Android
redrom

5
cordova 5 ile başlayarak, süreç biraz değişiyor: ilee.co.uk/Sign-Releases-with-Cordova-Android/…
Sombriks

Cordova 5 ad dosyası ile "ant.properties" yerine "release-signing.properties"; diğer tüm adımlar @malcubierre
Mario Orlandi

apk yeni sürümü cordova 6.0.0 mevcut app indirilmiyor. Sorunumu çözemediğim tüm belgeleri takip ettim bana yardım edebilir misin @MarioOrlandi
NGB

11

Cordova 6.2.0'da , sürüm derlemesi oluşturmanın kolay bir yolu vardır. buradaki diğer adımlara bakın Adım 1, 2 ve 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

The system cannot find the file specifiedCordova 6.2.0 kullanıldığında hata alıyorum
mr5

anahtar deposu yolunu değiştirdiniz mi? Öyleyse lütfen komutu buraya gönderin.
KrIsHnA

Evet. Bucordova build android --release -- --keystore="C:\release.keystore" --storePassword=****** --alias=mr5
mr5

1
Parolamı "(çift tırnak) içine aldıktan sonra çalışmaya başladı. Bence Cordova'nın özel karakterleri ayrıştırma konusunda bir sorunu var.
mr5

Herkes Ionic kullanıyorsa, bu belgeyi kontrol edebilirsiniz ionicframework.com/docs/cli/cordova/build
Nguyen Tran

7

Mac'te (osx), biri ilk yayın diğeri güncelleme için olmak üzere iki .sh dosyası oluşturdum:

#!/bin/sh
echo "Ionic to Signed APK ---- b@agencys.eu // 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

Uygulamanızı güncellemek için:

#!/bin/sh
echo "Ionic to Signed APK ---- b@agencys.eu // 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

Ana klasörünüzde veya uygulama klasörlerinizin üstünde bir klasörde olduğunuzu varsayarsak. Bu komut dosyasını kullanmak için chmod'u doğru ayarladığınızdan emin olun. Sonra :

./ionicToApk.sh # or whatever depending of the name of your file, in CLI

İmzalı apk'niz Uygulama klasörünüzde / platformlarda / android / build / outputs / apk / olarak SignedApk.apk olarak gelecek. İlk komut dosyasında tanımlanan doğru anahtar diğer adını ve şifreyi kullandığınızdan emin olun


2

Cmd cinsinden cordova sürüm APK dosyasını oluşturun.

ANAHTAR MAĞAZA DOSYASI YOLU : anahtar deposu dosya yolu (F: /cordova/myApp/xxxxx.jks)

ANAHTAR MAĞAZA ŞİFRESİ : xxxxx

ANAHTAR MAĞAZA ALIAS : xxxxx

ANAHTAR MAĞAZA ALIAS ŞİFRESİ : xxxxx

Zipalign.exe dosyasının YOLU : zipalign.exe dosya yolu (C: \ Kullanıcılar \ xxxx \ AppData \ Local \ Android \ sdk \ build-tools \ 25.0.2 \ zipalign)

Android imzasız APK adıAndroid imzasız : android-release-unsigned.apk

ANDROID BÜLTENİ APK NAME : android-release.apk

Aşağıdaki adımları cmd cinsinden çalıştırın (yönetici olarak çalıştırın)

  1. cordova build - sürüm android
  2. android-release-unsigned.apk dosya konumuna gidin (PROJECT \ platforms \ android \ build \ outputs \ apk)
  3. jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore < ANAHTAR MAĞAZA DOSYASI YOLU > < ANDROID AMAÇLI APK ADI > < KEY STORE ALIAS >
  4. < Zipalign.exe PATH > -v 4 < ANDROID AMAÇLI APK ADI > < ANDROID BÜLTENİ APK AD >

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

0

Önce Uygulamanızı güncellüyorsanız sürüm kodunuzu ve sürüm adınızı kontrol edin. Ve daha önce bir anahtar deponuz olduğundan emin olun.

Uygulamayı güncelliyorsanız 1,3,4 adımı izleyin.

Aşama 1:

Sürüm yapımızı oluşturmak için cordova projenize gidin:

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

Sonra, imzasız APK dosyasını platformlar / android / ant-build'de bulabiliriz. Örneğimizde, dosya

Eğer ant-build kullandıysan

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

VEYA

Gradle-build kullandıysanız

yourProject/platforms/android/build/outputs/apk/Example-release-unsigned.apk

Adım 2:

Anahtar Üretimi:

Sözdizimi:

keytool -genkey -v -keystore <keystoreName>.keystore -alias <Keystore AliasName> -keyalg <Key algorithm> -keysize <Key size> -validity <Key Validity in Days>

keytool komutu tanımıyorsa bu adımı uygulayın

Keytool yürütülebilir dosyasının bulunduğu dizinin yolunuzda olduğunu kontrol edin. (Örneğin, Windows 7 makinemde C: \ Program Files (x86) \ Java \ jre6 \ bin dizinindedir.)

Misal:

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

Ardından NAME-mobileapps.keystore adıyla Anahtar deposu oluşturuldu

Aşama 3:

Oluşturulan anahtar deposunu D: \ projects \ Phonegap \ Örnek \ platformlar \ android \ ant-build klasörüne yerleştirin

İmzasız APK'yı imzalamak için, JDK'da bulunan jarsigner aracını çalıştırın:

Sözdizimi:

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

Yeniden değerlendirilmezse bu adımları uygulayın

(1) "Bu PC" ye sağ tıklayın> Özellikler> Gelişmiş sistem ayarları> Ortam Değişkenleri'ne sağ tıklayın> PATH'i ve ardından DÜZENLE'yi seçin.

(2) Ortam değişkenlerine jdk bin klasör yolunuzu ekleyin, şöyle görünmelidir:

"C: \ Program Files \ Java \ jdk1.8.0_40 \ bin".

Misal:

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'

Bu, apk'yi yerinde imzalar.

4. Adım:

Son olarak, APK'yı optimize etmek için zip hizalama aracını çalıştırmamız gerekiyor:

zipalign tanımıyorsa

(1) android sdk yolunuza gidin ve genellikle android-sdk \ build-tools \ 23.0.3'te bulunan zipalign'ı bulun

(2) Zipalign dosyasını yapıştırın genellikle aşağıdaki yoldaki yayın apk klasörünüze kopyalayın

Projeniz / platformlar / robot / ant-yapı / Örnek salım-unsigned.apk

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

VEYA

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

Şimdi example.apk adlı son sürüm ikili dosyamız var ve bunu Google Play Store'da yayınlayabiliriz.


0

Windows için bir build.cmddosya oluşturdum :

(anahtar deposu yolunu ve takma adını değiştirin)

Cordova için:

@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%

İyonik için:

@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%

Ptoject dizinine kaydedin, cmd ile çift tıklayabilir veya açabilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.