Mengapa Fail APK Perlu Ditandatangani?
Setiap apl Android mesti ditandatangani secara digital sebelum ia boleh dipasang. Tandatangan mempunyai beberapa tujuan:
- Mengesahkan identiti pembangun apl
- Memastikan APK tidak diusik
- Membenarkan Android memadankan kemas kini apl dengan yang asal
- Diperlukan untuk memasang pada semua peranti Android
Alat Desktop Diperlukan
Tandatangan APK memerlukan alatan baris perintah (JDK / Android SDK). Ini tidak boleh dilakukan dalam pelayar web. Ikuti panduan di bawah untuk menandatangani APK pada komputer anda.
Kaedah 1: Tandatangan dengan apksigner (Disyorkan)
apksigner ialah alat tandatangan APK rasmi Google, disertakan dalam Alat Binaan SDK Android.
Langkah 1: Hasilkan Kedai Kunci
keytool -genkey -v -keystore my-release-key.jks \
-keyalg RSA -keysize 2048 -validity 10000 \
-alias my-key-alias
Langkah 2: Tandatangani APK
apksigner sign --ks my-release-key.jks \
--ks-key-alias my-key-alias \
--out signed-app.apk unsigned-app.apk
Langkah 3: Sahkan Tandatangan
apksigner verify --verbose signed-app.apk
Kaedah 2: Tandatangani dengan jarsigner (Legasi)
# Sign
jarsigner -verbose -sigalg SHA256withRSA \
-digestalg SHA-256 \
-keystore my-release-key.jks \
app-unsigned.apk my-key-alias
# Verify
jarsigner -verify -verbose app-signed.apk
Langkah 4: Zipalign (Penting!)
Selepas menandatangani, optimumkan APK dengan zipalign:
zipalign -v 4 signed-app.apk aligned-app.apk
Tandatangan Nyahpepijat (Untuk Ujian)
Untuk tujuan ujian, anda boleh menggunakan stor kunci nyahpepijat Android lalai:
# Location of debug keystore:
# Linux/Mac: ~/.android/debug.keystore
# Windows: C:\Users\{USERNAME}\.android\debug.keystore
# Sign with debug key
apksigner sign --ks ~/.android/debug.keystore \
--ks-key-alias androiddebugkey \
--ks-pass pass:android \
app.apk
Perbandingan Alat Menandatangani
| Metrik | apksigner | jarsigner |
|---|---|---|
| Tandatangan V1 | ||
| Tandatangan V2 | ||
| Tandatangan V3 | ||
| Disyorkan | Legasi |
Penandatangan APK — Soalan Lazim
Soalan lazim tentang tandatangan APK, kedai kunci dan tandatangan kod Android
Mengapa Pesanan Penjajaran (zipalign Sebelum apksigner) Penting pada Android 11–15
Salah satu kesilapan yang paling kerap dilakukan oleh pembangun dan pengubah semasa menandatangani APK yang diubah suai atau digabungkan sedang menjalankan zipalign selepas menandatangani pakej—atau menggunakan utiliti jarsigner warisan Java dan bukannya Android SDK apksigner Google. Oleh kerana Skim Tandatangan APK v2 dan v3 mengira cincangan kriptografi ke atas keseluruhan reka letak binari arkib ZIP, mengubah suai offset bait dengan zipalign selepas menandatangani serta-merta membatalkan blok tandatangan v2/v3.
Bermula dengan Android 11 (API tahap 30) dan dikuatkuasakan secara ketat pada Android 14 dan 15, PackageManager memerlukan dua syarat tidak boleh dirunding untuk mana-mana APK yang menyasarkan tahap SDK moden:
- resources.arsc Tidak Dimampatkan Dijajarkan 4-Bait: Jadual sumber terkumpul (resources.arsc) mesti disimpan tidak dimampatkan (STORED) dan diselaraskan pada sempadan 4-bait supaya Android boleh memetakan memori (mmap) terus tanpa menyalinnya ke dalam RAM. Sentiasa laksanakan tandatangan zipalign -p -f -v 4 input.apk aligned.apk sebelum ini.
- Blok Tandatangan v2+ Mandatori: Menandatangani APK yang menyasarkan API 30+ dengan jarsigner (yang hanya menulis tandatangan v1 META-INF/) akan menyebabkan Android 11–15 menolak pemasangan dengan INSTALL_PARSE_FAILED_NO_CERTIFICATES. Gunakan penjana arahan interaktif di atas untuk membina perintah apksigner --v2-signing-enabled=true yang tepat untuk stor kunci anda, atau sahkan output anda yang ditandatangani dalam Pengesah Tandatangan APK kami.