Menandatangani APK secara manual
Setelah aplikasi dibuat untuk rilis, APK harus ditandatangani sebelum distribusi sehingga dapat dijalankan pada perangkat Android. Proses ini biasanya ditangani dengan IDE, namun ada beberapa situasi di mana perlu menandatangani APK secara manual, di baris perintah. Langkah-langkah berikut terlibat dengan penandatanganan APK:
Buat Kunci Privat - Langkah ini perlu dilakukan hanya sekali. Kunci privat diperlukan untuk menandatangani APK secara digital. Setelah kunci privat disiapkan, langkah ini dapat dilewati untuk build rilis mendatang.
Zipalign APK – Zipalign adalah proses pengoptimalan yang dilakukan pada aplikasi. Ini memungkinkan Android untuk berinteraksi lebih efisien dengan APK saat runtime. Xamarin.Android melakukan pemeriksaan pada runtime, dan tidak akan memungkinkan aplikasi untuk berjalan jika APK belum di-zipaligned.
Tanda tangani APK – Langkah ini melibatkan penggunaan utilitas apksigner dari Android SDK dan menandatangani APK dengan kunci privat yang dibuat pada langkah sebelumnya. Aplikasi yang dikembangkan dengan versi lama alat build Android SDK sebelum v24.0.3 akan menggunakan aplikasi jarsigner dari JDK. Kedua alat ini akan dibahas secara lebih rinci di bawah ini.
Urutan langkah-langkah penting dan tergantung pada alat mana yang digunakan untuk menandatangani APK. Saat menggunakan apksigner, penting untuk terlebih dahulu zipalign aplikasi, dan kemudian menandatanganinya dengan apksigner. Jika perlu menggunakan jarsigner untuk menandatangani APK, maka penting untuk terlebih dahulu menandatangani APK dan kemudian menjalankan zipalign.
Prasyarat
Panduan ini akan berfokus pada penggunaan apksigner dari alat build Android SDK, v24.0.3 atau yang lebih tinggi. Ini mengasumsikan bahwa APK telah dibangun.
Aplikasi yang dibuat menggunakan versi lama Android SDK Build Tools harus menggunakan jarsigner seperti yang dijelaskan dalam Menandatangani APK dengan jarsigner di bawah ini.
Membuat Keystore Privat
Keystore adalah database sertifikat keamanan yang dibuat dengan menggunakan keytool program dari Java SDK. Keystore sangat penting untuk menerbitkan aplikasi Xamarin.Android, karena Android tidak akan menjalankan aplikasi yang belum ditandatangani secara digital.
Selama pengembangan, Xamarin.Android menggunakan keystore debug untuk menandatangani aplikasi, yang memungkinkan aplikasi untuk disebarkan langsung ke emulator atau ke perangkat yang dikonfigurasi untuk menggunakan aplikasi yang dapat di-debug. Namun, keystore ini tidak diakui sebagai keystore yang valid untuk tujuan mendistribusikan aplikasi.
Untuk alasan ini, keystore privat harus dibuat dan digunakan untuk penandatanganan aplikasi. Ini adalah langkah yang hanya boleh dilakukan sekali, karena kunci yang sama akan digunakan untuk menerbitkan pembaruan dan kemudian dapat digunakan untuk menandatangani aplikasi lain.
Penting untuk melindungi keystore ini. Jika hilang, maka tidak akan mungkin untuk memublikasikan pembaruan ke aplikasi dengan Google Play. Satu-satunya solusi untuk masalah yang disebabkan oleh keystore yang hilang adalah membuat keystore baru, menandatangani ulang APK dengan kunci baru, lalu mengirimkan aplikasi baru. Kemudian aplikasi lama harus dihapus dari Google Play. Demikian juga, jika keystore baru ini disusupi atau didistribusikan secara publik, maka dimungkinkan bagi versi aplikasi yang tidak resmi atau berbahaya untuk didistribusikan.
Membuat Keystore Baru
Membuat keystore baru memerlukan keytool alat baris perintah dari Java SDK. Cuplikan berikut adalah contoh cara menggunakan keytool (ganti <my-filename>
dengan nama file untuk keystore dan <key-name>
dengan nama kunci dalam keystore):
$ keytool -genkeypair -v -keystore <filename>.keystore -alias <key-name> -keyalg RSA \
-keysize 2048 -validity 10000
Hal pertama yang akan diminta keytool adalah kata sandi untuk keystore. Kemudian akan meminta beberapa informasi untuk membantu membuat kunci. Cuplikan berikut adalah contoh pembuatan kunci baru yang disebut publishingdoc
yang akan disimpan dalam file xample.keystore
:
$ keytool -genkeypair -v -keystore xample.keystore -alias publishingdoc -keyalg RSA -keysize 2048 -validity 10000
Enter keystore password:
Re-enter new password:
What is your first and last name?
[Unknown]: Ham Chimpanze
What is the name of your organizational unit?
[Unknown]: NASA
What is the name of your organization?
[Unknown]: NASA
What is the name of your City or Locality?
[Unknown]: Cape Canaveral
What is the name of your State or Province?
[Unknown]: Florida
What is the two-letter country code for this unit?
[Unknown]: US
Is CN=Ham Chimpanze, OU=NASA, O=NASA, L=Cape Canaveral, ST=Florida, C=US correct?
[no]: yes
Generating 2,048 bit RSA key pair and self-signed certificate (SHA1withRSA) with a validity of 10,000 days
for: CN=Ham Chimpanze, OU=NASA, O=NASA, L=Cape Canaveral, ST=Florida, C=US
Enter key password for <publishingdoc>
(RETURN if same as keystore password):
Re-enter new password:
[Storing xample.keystore]
Untuk mencantumkan kunci yang disimpan di keystore, gunakan keytool dengan opsi – list
:
$ keytool -list -keystore xample.keystore
Zipalign the APK
Sebelum menandatangani APK dengan apksigner, penting untuk terlebih dahulu mengoptimalkan file menggunakan alat zipalign dari Android SDK. zipalign akan merestrukturisasi sumber daya dalam APK sepanjang batas 4 byte. Penyelarasan ini memungkinkan Android memuat sumber daya dengan cepat dari APK, meningkatkan performa aplikasi dan berpotensi mengurangi penggunaan memori. Xamarin.Android akan melakukan pemeriksaan run-time untuk menentukan apakah APK telah di-zipaligned. Jika APK tidak di-zipaligned, maka aplikasi tidak akan berjalan.
Perintah berikut akan menggunakan APK yang ditandatangani dan menghasilkan APK yang ditandatangani dan di-zipalign yang disebut helloworld.apk yang siap didistribusikan.
$ zipalign -f -v 4 mono.samples.helloworld-unsigned.apk helloworld.apk
Menandatangani APK
Setelah zipaligning APK, perlu untuk menandatanganinya menggunakan keystore. Ini dilakukan dengan alat apksigner , yang ditemukan di direktori build-tools dari versi alat build SDK. Misalnya, jika alat build Android SDK v25.0.3 diinstal, maka apksigner dapat ditemukan di direktori:
$ ls $ANDROID_HOME/build-tools/25.0.3/apksigner
/Users/tom/android-sdk-macosx/build-tools/25.0.3/apksigner*
Cuplikan berikut mengasumsikan bahwa apksigner dapat diakses oleh PATH
variabel lingkungan. Ini akan menandatangani APK menggunakan alias publishingdoc
kunci yang terkandung dalam file xample.keystore:
$ apksigner sign --ks xample.keystore --ks-key-alias publishingdoc mono.samples.helloworld.apk
Ketika perintah ini dijalankan, apksigner akan meminta kata sandi ke keystore jika perlu.
Lihat dokumentasi Google untuk detail selengkapnya tentang penggunaan apksigner.
Catatan
Menurut masalah Google 62696222, apksigner "hilang" dari Android SDK. Solusinya adalah menginstal alat build Android SDK v25.0.3 dan menggunakan versi apksigner tersebut.
Menandatangani APK dengan jarsigner
Peringatan
Bagian ini hanya berlaku jika perlu menandatangani APK dengan utilitas jarsigner . Pengembang dianjurkan untuk menggunakan apksigner untuk menandatangani APK.
Teknik ini melibatkan penandatanganan file APK menggunakan perintah jarsigner dari Java SDK. Alat jarsigner disediakan oleh Java SDK.
Berikut ini menunjukkan cara menandatangani APK dengan menggunakan jarsigner dan kunci publishingdoc
yang terkandung dalam file keystore bernama xample.keystore :
$ jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore xample.keystore mono.samples.helloworld.apk publishingdoc
Catatan
Saat menggunakan jarsigner, penting untuk menandatangani APK terlebih dahulu, lalu menggunakan zipalign.