APK Dosyalarının Neden İmzalanması Gerekir?
Her Android uygulamasının kurulabilmesi için dijital olarak imzalanması gerekir. İmza çeşitli amaçlara hizmet eder:
- Uygulama geliştiricisinin kimliğini doğrular
- APK'nın kurcalanmamasını sağlar
- Android'in uygulama güncellemelerini orijinaliyle eşleştirmesine olanak tanır
- Tüm Android cihazlara kurulum için gereklidir
Masaüstü Aracı Gerekli
APK imzalama, komut satırı araçlarını (JDK / Android SDK) gerektirir. Bu bir web tarayıcısında yapılamaz. Bilgisayarınızda APK'ları imzalamak için aşağıdaki kılavuzu izleyin.
Yöntem 1: apksigner ile imzalayın (Önerilir)
apksigner, Google'ın resmi APK imzalama aracıdır ve Android SDK Oluşturma Araçları'na dahildir.
1. Adım: Anahtar Deposu Oluşturun
keytool -genkey -v -keystore my-release-key.jks \
-keyalg RSA -keysize 2048 -validity 10000 \
-alias my-key-alias
2. Adım: APK'yı imzalayın
apksigner sign --ks my-release-key.jks \
--ks-key-alias my-key-alias \
--out signed-app.apk unsigned-app.apk
3. Adım: İmzayı Doğrulayın
apksigner verify --verbose signed-app.apk
Yöntem 2: Jarsigner ile imzalayın (Eski)
# 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
Adım 4: Zipalign (Önemli!)
İmzaladıktan sonra APK'yı zipalign ile optimize edin:
zipalign -v 4 signed-app.apk aligned-app.apk
Hata Ayıklama İmzalama (Test İçin)
Test amacıyla varsayılan Android hata ayıklama anahtar deposunu kullanabilirsiniz:
# 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
İmzalama Araçları Karşılaştırması
| Ölçüt | apk imzalayan | jarsigner |
|---|---|---|
| V1 İmzası | ||
| V2 İmzası | ||
| V3 İmzası | ||
| Tavsiye edilen | Miras |
APK İmzalayan — Sıkça Sorulan Sorular
APK imzalama, anahtar depoları ve Android kod imzalamayla ilgili sık sorulan sorular
Android 11–15'te Hizalama Sırası (apksigner'dan Önce Zipalign) Neden Önemlidir?
Geliştiricilerin ve modcuların değiştirilmiş veya birleştirilmiş bir APK'yı imzalarken yaptığı en sık hatalardan biri çalışıyorzipalign imzalamak veya Java'nın mirasını kullanmak'ın Android SDK'sı yerine yardımcı programapksigner. APK Signature Scheme v2 ve v3, ZIP arşivinin tüm ikili düzeni üzerinde bir şifreleme karması hesapladığından, bayt uzaklıklarını şu şekilde değiştirir:ıktan sonra v2/v3 imza bloğunu hemen geçersiz kılar. sonrasında jarsigner zipalign
Android 11'den (API düzeyi 30) başlayarak ve Android 14 ve 15'te sıkı bir şekilde uygulanan PackageManager, modern SDK düzeylerini hedefleyen herhangi bir APK için tartışılamaz iki koşul gerektirir:
- Sıkıştırılmamış 4 Bayt Hizalanmış resources.arsc: Derlenmiş kaynak tablosunun (resources.arsc) sıkıştırılmamış olarak (STORED) saklanması ve 4 baytlık bir sınırda hizalanması gerekir; böylece Android, onu RAM'e kopyalamadan doğrudan bellek eşlemesi (mmap) yapabilir. Her zaman zipalign -p -f -v 4 input.apk aligned.apk önce imzalamayı yürütün.
- Zorunlu v2+ İmza Bloğu: API 30+'yı hedefleyen bir APK'nın jarsigner (yalnızca v1 META-INF/ imzası yazan) ile imzalanması, Android 11-15'in INSTALL_PARSE_FAILED_NO_CERTIFICATES ile yüklemeyi reddetmesine neden olacaktır. Anahtar deponuz için tam apksigner --v2-signing-enabled=true komutunu oluşturmak için yukarıdaki etkileşimli komut oluşturucuyu kullanın veya imzalı çıktınızı APK İmza Doğrulayıcı'mizde doğrulayın.