Bagaimana cara membuat file APK yang ditandatangani menggunakan antarmuka baris perintah Cordova?

169

Saya membuat contoh aplikasi bernama checkStatus. Sekarang saya ingin membuat file APK yang ditandatangani. Jadi saya dapat menginstalnya di perangkat yang berbeda untuk pengujian saya.

Untuk ini, saya mencari di Google dan menemukan dokumentasi ini .

Sesuai dokumen, saya beralih ke direktori proyek saya dan menjalankan perintah berikut:

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

Setelah saya menjalankan perintah di atas, saya mendapat file bernama key-name.keystoreat projectRoot/key-name.keystore.

Dan kemudian saya salin-tempel file itu ke projectRoot/platforms/android/key-name.keystore.

Setelah itu, saya membuat file bernama ant.propertiesdan menyimpannya projectRoot/platforms/android.

Saya menulis kode berikut di dalam file:

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

Setelah itu, saya menjalankan perintah berikut untuk melepaskan

Cordova builds android --release

Itu melempar kesalahan berikut:

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

Jadi kali ini, saya memodifikasi key.storenilai dalam ant.propertiesfile seperti dengan cara berikut.

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

Sekali lagi, saya menjalankan cordova build android --releaseperintah. Itu melempar kesalahan yang sama.

Adakah yang bisa memberi tahu saya apa yang telah saya lakukan salah?

vasan
sumber
3
dimulai dengan cordova 5, prosesnya sedikit berubah: ilee.co.uk/Sign-Releases-with-Cordova-Android/…
Sombriks

Jawaban:

305

Langkah 1:

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

tambahkan --savesehingga menghapus plugin dari config.xmlfile.

Langkah 2:

Untuk menghasilkan rilis rilis untuk Android, pertama-tama kita perlu membuat perubahan kecil pada AndroidManifest.xmlfile yang ditemukan di platform / android. Edit file dan ubah baris:

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

dan ubah android:debuggableke false:

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

Pada cordova 6.2.0 hapus tag android: debuggable sepenuhnya. Berikut ini penjelasan dari cordova:

Penjelasan untuk masalah jenis "HardcodedDebugMode": Yang terbaik adalah meninggalkan android: atribut debuggable dari manifes. Jika Anda melakukannya, maka alat akan secara otomatis memasukkan android: debuggable = true ketika membangun APK untuk debug pada emulator atau perangkat. Dan ketika Anda melakukan rilis build, seperti Mengekspor APK, ini akan secara otomatis membuatnya menjadi salah.

Jika di sisi lain Anda menentukan nilai tertentu dalam file manifes, maka alat akan selalu menggunakannya. Ini dapat menyebabkan aplikasi Anda secara tidak sengaja menerbitkan informasi debug.

Langkah 3:

Sekarang kita bisa memberi tahu cordova untuk membuat versi rilis kami:

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

Kemudian, kita dapat menemukan file APK yang tidak ditandatangani di platforms/android/ant-build. Dalam contoh kami, file ituplatforms/android/ant-build/Example-release-unsigned.apk

Langkah 4:

Catatan: Kami memiliki keystore kami keystoreNAME-mobileapps.keystoredi Repo Git ini, jika Anda ingin membuat yang lain, silakan lanjutkan dengan langkah-langkah berikut.

Generasi kunci:

Sintaksis:

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

Misalnya:

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

Maka penyimpanan kunci telah dihasilkan dengan nama sebagai NAME-mobileapps.keystore

Langkah 5:

Tempatkan keystore yang dihasilkan di

Cordova versi lama

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

Cordova versi baru

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

Untuk menandatangani APK yang tidak ditandatangani, jalankan alat jarsigner yang juga termasuk dalam JDK:

Sintaksis:

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

Misalnya:

D:\projects\Phonegap\Example\platforms\android\ant-build> jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore NAME-mobileapps.keystore Example-release-unsigned.apk xxxxxmobileapps

ATAU

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'

Ini menandatangani apk di tempat.

Langkah 6:

Terakhir, kita perlu menjalankan alat zip align untuk mengoptimalkan APK:

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

ATAU

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

ATAU

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

Sekarang kami memiliki rilis biner terakhir kami yang disebut example.apk dan kami dapat merilis ini di Google Play Store.

cfprabhu
sumber
9
Oke saya terima pemikiran Anda. Tetapi saya memiliki repositori git pribadi dan kami memiliki tim untuk bekerja pada aplikasi seluler. Jadi nyaman buat saya.
cfprabhu
5
Mengapa penting untuk menghapus org.apache.cordova.console?
foreyez
5
@ cfprabhu Langkah 5 adalah memberikan peringatan "Tidak -sa atau -saja diberikan dan toples ini tidak diberi cap waktu.". Memperbaikinya dengan menambahkan "-tsa timestamp.digicert.com" ke perintah. Mungkin bermanfaat untuk pengguna lain
Thomas Bormans
6
zipalign di bawah OSX tersedia di ~ / Library / Android / SDK / build-tools / 22.0.1 / zipalign
chillwalker
2
@ThomasBormans entah bagaimana -tsa timestamp.digicert.commelemparkan NullPointerException untuk saya. -tsa http://timestamp.digicert.comtampaknya memperbaikinya
Thomas
123

Pembaruan untuk @malcubierre untuk Cordova 4 (dan yang lebih baru) -

Buat file yang dipanggil release-signing.propertiesdan letakkan di APPFOLDER\platforms\androidfolder

Isi file: edit setelah = untuk semua kecuali baris ke-2

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

Maka perintah ini harus membangun versi rilis:

cordova build android --release
Jon
sumber
2
Terima kasih! Anda juga dapat mengubah nama / lokasi file properti Anda, tetapi Anda harus menentukan dalam build-extras.gradlefile. Cordova doc yang relevan di sini .
Dunc
Aplikasi saya tidak mendapatkan pembaruan ke versi berikutnya, versi pertama dibuat di semut build (cordova 3). Saya memutakhirkan cordova saya menjadi 6.0.0 sekarang versi kedua dibuat dalam gradle build, saya mengikuti cordova doc terbaru untuk membuat apk yang ditandatangani tetapi masih aplikasi saya tidak diperbarui. Saya telah menelusuri semua info web tetapi masih saja ada yang salah. Tolong bantu saya @Dunc
NGB
@Naveen Saya menggunakan Cordova 5.2.0, memiliki berbagai masalah dengan versi lain> 5. Sarankan Anda mencobanya jika Anda bisa. Lalu, jika masih mengalami masalah, saya sarankan mengajukan pertanyaan baru.
Dunc
Masih mengalami masalah, versi baru apk tidak diunduh dari aplikasi yang ada. @Dunc
NGB
@Aktifkan solusi apa pun
NGB
52

Dalam dokumentasi saat ini kita dapat menentukan build.json dengan keystore:

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

Dan kemudian, jalankan commando dengan --buildConfig argumente, dengan cara ini:

cordova run android --buildConfig
infinito84
sumber
2
Luar biasa <3 jawaban Anda adalah tentang file yang dapat saya kontrol versi!
gustavohenke
3
di direktori mana json ini harus ada?
Beelphegor
6
cordova build android --release
shadi
2
Tempatkan build.json di folder proyek root bersama dengan file keystore. Ini adalah metode bebas repot paling efektif untuk penandatanganan yang saya temukan.
Joel Caton
1
Untuk beberapa alasan path file saya harus diubah menjadi "../android.keystore". (garis miring)
Dilhan Jayathilake
20

Langkah 1:

Pergi ke cordova\platforms\androidsemut buat ant.propertiesfile bernama fille dengan info file keystore (keystore ini dapat dihasilkan dari Android SDK, studio ...):

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

Langkah 2:

Pergi ke jalur cordova dan jalankan:

cordova build android --release

Catatan: Anda akan diminta menanyakan keystore dan kata sandi kunci Anda

YourApp-release.apk akan muncul di \cordova\platforms\android\ant-build

malcubierre
sumber
1
Berikut adalah solusi yang berhasil: ilee.co.uk/Sign-Releases-with-Cordova-Android
redrom
5
dimulai dengan cordova 5, prosesnya sedikit berubah: ilee.co.uk/Sign-Releases-with-Cordova-Android/…
Sombriks
Dengan Cordova 5 nama file "release-signing.properties" bukan "ant.properties"; semua langkah lain persis seperti yang dijelaskan oleh @malcubierre
Mario Orlandi
versi baru apk tidak diunduh dari aplikasi yang ada di cordova 6.0.0. Saya mengikuti semua dokumen yang masih belum menyelesaikan masalah saya, bisakah Anda membantu saya @MarioOrlandi
NGB
11

Dalam cordova 6.2.0 , ia memiliki cara mudah untuk membuat rilis build. lihat langkah-langkah lain di sini. Langkah 1, 2 dan 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
KrIsHnA
sumber
Saya mendapatkan kesalahan dalam The system cannot find the file specifiedmenggunakan Cordova 6.2.0
mr5
sudahkah Anda mengganti jalur keystore? Jika demikian silakan posting perintah di sini.
KrIsHnA
Ya. Inicordova build android --release -- --keystore="C:\release.keystore" --storePassword=****** --alias=mr5
mr5
1
Setelah melampirkan kata sandi saya dengan "(penawaran ganda), mulai berjalan. Saya pikir Cordova memiliki masalah tentang parsing karakter khusus.
mr5
Jika ada yang menggunakan Ionic, Anda dapat checkout dokumen ini ionicframework.com/docs/cli/cordova/build
Nguyen Tran
7

Di Mac (osx), saya membuat dua file .sh, satu untuk publikasi pertama dan satu lagi untuk memperbarui:

#!/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

Dan untuk memperbarui aplikasi Anda:

#!/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

Dengan asumsi Anda berada di folder rumah Anda atau folder yang berada di atas folder aplikasi Anda. Pastikan untuk mengatur chmod dengan benar untuk menggunakan skrip ini. Kemudian :

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

Apk yang Anda tandatangani akan berada di folder Aplikasi Anda / platform / android / build / outputs / apk / sebagai SignedApk.apk Pastikan untuk menggunakan alias dan kata sandi kunci yang benar yang ditentukan dengan skrip pertama

Ben
sumber
2

Buat file APK rilis cordova dalam cmd.

PATY STORE FILE KEY : path file keystore (F: /cordova/myApp/xxxxx.jks)

TOKO KUNCI SANDI : xxxxx

ALIAS STORE KUNCI : xxxxx

TOKO KUNCI ALIAS PASSWORD : xxxxx

PATH OF zipalign.exe : jalur file zipalign.exe (C: \ Users \ 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

Jalankan langkah-langkah di bawah ini dalam cmd (jalankan sebagai administrator)

  1. cordova build --release android
  2. buka lokasi file android-release-unsigned.apk (PROJECT \ platform \ android \ build \ outputs \ apk)
  3. jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore < KEY STORE FILE PATH > < ANDROID UNSIGNED APK NAME > < KEY STORE ALIAS >
  4. < PATH OF zipalign.exe > -v 4 < ANDROID UNSIGNED NAMA APK > < ANDROID RELEASE APK NAME >
Om Shankar
sumber
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
nicolsondsouza
sumber
0

Pertama Periksa kode versi dan nama versi Anda jika Anda memperbarui aplikasi Anda. Dan pastikan Anda memiliki keystore sebelumnya.

Jika Anda memperbarui aplikasi maka ikuti langkah 1,3,4.

Langkah 1:

Goto proyek cordova Anda untuk menghasilkan rilis build kami:

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

Kemudian, kita dapat menemukan file APK yang tidak ditandatangani di platform / android / ant-build. Dalam contoh kami, file itu

jika Anda menggunakan semut-membangun

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

ATAU

jika Anda menggunakan gradle-build

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

Langkah 2:

Generasi kunci:

Sintaksis:

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

jika perintah keytool tidak dikenali lakukan langkah ini

Periksa apakah direktori tempat eksekusi keytool ada di jalur Anda. (Misalnya, pada mesin Windows 7 saya, ada di C: \ Program Files (x86) \ Java \ jre6 \ bin.)

Contoh:

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

Maka penyimpanan kunci telah dihasilkan dengan nama sebagai NAME-mobileapps.keystore

Langkah 3:

Tempatkan keystore yang dihasilkan di D: \ project \ Phonegap \ Example \ platform \ android \ ant-build

Untuk menandatangani APK yang tidak ditandatangani, jalankan alat jarsigner yang juga termasuk dalam JDK:

Sintaksis:

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

Jika tidak melakukan perbaikan lakukan langkah-langkah ini

(1) Klik kanan pada "PC ini"> Properti klik kanan> Pengaturan sistem lanjutan> Variabel Lingkungan> pilih PATH kemudian EDIT.

(2) Tambahkan path folder jdk bin Anda ke variabel lingkungan, seharusnya akan terlihat seperti ini:

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

Contoh:

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'

Ini menandatangani apk di tempat.

Langkah 4:

Terakhir, kita perlu menjalankan alat zip align untuk mengoptimalkan APK:

jika zipalign tidak dikenali maka

(1) goto path sdk android Anda dan temukan zipalign biasanya di android-sdk \ build-tools \ 23.0.3

(2) Salin tempel file zipalign ke folder apk rilis rilis Anda, biasanya di lintasan di bawah ini

yourproject / platform / android / ant-build / Contoh-release-unsigned.apk

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

ATAU

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

Sekarang kami memiliki rilis biner terakhir kami yang disebut example.apk dan kami dapat merilis ini di Google Play Store.

Arpit Patel
sumber
0

Untuk Windows, saya telah membuat build.cmdfile:

(ganti jalur keystore dan alias)

Untuk Cordova:

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

Dan untuk ionik:

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

Simpan di direktori ptoject, Anda dapat mengklik dua kali atau membukanya dengan cmd.

ssz
sumber