Zaten Derlenmiş Bir Apk Nasıl İmzalanır


121

Apktool içeren bir APK'nin kodunu çözdüm (orijinal kaynak kodu kaybolduğu için), böylece düzen xml dosyalarıyla ilgili bazı sorunları çözebilirim. Daha sonra apktool ile yeniden oluşturdum ve cihazıma yüklemeye çalıştığımda (adb: adb install appname.apk kullanarak) bana şu hatayı verdi:

[INSTALL_PARSE_FAILED_NO_CERTIFICATES]

ancak orijinal apk bir anahtar deposu tarafından imzalandı (tutulma IDE'sinde), bu değil, Eclipse dışındaki orijinal anahtar taşı dosyasıyla nasıl düzgün bir şekilde imzalayabilirim !?


evet, sertifikaların tüm amacı insanların bunu yapmasını engellemek ... Eğer orijinal sertifikanız yoksa bir tane yeniden oluşturmanız gerekecek
edthethird

hepsi bu, orijinal sertifikam var, ancak apk'nin kodunu çözmek / yeniden oluşturmak onu kaldırdı.
svarog

Yanıtlar:


285

kullanarak bir anahtar oluştur

keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000

ardından apk'yi kullanarak imzalayın:

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keystore my_application.apk alias_name

daha fazla bilgi için burayı kontrol edin


11
cevap bu olmalı, 27 artı oy karşısında 3 orijinal cevap, hadi!
Kyle

1
Bunu yaparsanız ve APK'yı yüklemeye çalışırsanız, bir INSTALL_FAILED_DUPLICATE_PERMISSION hatasıyla karşılaşabilirsiniz. Bu, orijinal APK'nin üzerine yazılamadığında olur (örneğin sistem veya yerleşik uygulama)
Couitchy

@Couitchy adb shell pm install -r /data/tmp/myapk.apk
Dr Deo

14
Bir anahtar oluşturmakla uğraşmak istemiyorsanız, hata ayıklama anahtarını şu şekilde kullanabilirsiniz: jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore ~ ​​/ .android / debug.keystore app.apk androiddebugkey -storepass android
Pellet

3
Kullanmak jarsignerve arasında bir fark var mı apksigner? Birinin imzalanması ve ardından zipaligning ve diğerinin zipaligning ve ardından imzalanması gerekiyor
Maria Ines Parnisari

72

Otomatik Süreç:

Bu aracı kullanın (Google'ın yeni apksigner'ını kullanır):

https://github.com/patrickfav/uber-apk-signer

Feragatname: Ben geliştiriciyim :)

Manuel İşlem:

1. Adım: Anahtar Deposu Oluşturun (yalnızca bir kez)

Bir kez bir anahtar deposu oluşturmanız ve unsignedapk'nizi imzalamak için kullanmanız gerekir . Bulunan JDK tarafından sağlananları kullanınkeytool %JAVA_HOME%/bin/

keytool -genkey -v -keystore my.keystore -keyalg RSA -keysize 2048 -validity 10000 -alias app

2. veya 4. Adım: Zipalign

zipalign Android SDK tarafından sağlanan bir araç olan örn. %ANDROID_HOME%/sdk/build-tools/24.0.2/, APK'yı Play Store'a yüklemek istiyorsanız zorunlu bir optimizasyon adımıdır.

zipalign -p 4 my.apk my-aligned.apk

Not: Eski kullanırken jarsignersize zipalign gereken SONRA imzalanması. Yeni apksigneryöntemi kullanırken bunu imzalamadan ÖNCE yaparsınız (kafa karıştırıcı, biliyorum). Apksigner düzgün çalışmadan önce zipalign'ı çağırmak, çünkü apksigner APK hizalamasını ve sıkıştırmasını korur (jarsigner'ın aksine).

Sen edebilirsiniz doğrulamak uyum

zipalign -c 4 my-aligned.apk

3. Adım: İmzalayın ve Doğrulayın

24.0.2 ve daha eski yapı araçlarını kullanma

Kullanım jarsignerkeytool gibi, JDK dağıtımı ile birlikte gelir bulundu %JAVA_HOME%/bin/ve o kadar gibi kullanın:

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my.keystore my-app.apk my_alias_name

ve ile doğrulanabilir

jarsigner -verify -verbose my_application.apk

24.0.3 ve daha yeni derleme araçlarını kullanma

Android 7.0, daha hızlı uygulama yükleme süreleri ve APK dosyalarında yetkisiz değişikliklere karşı daha fazla koruma sunan yeni bir uygulama imzalama şeması olan APK Signature Scheme v2'yi sunar (Daha fazla ayrıntı için buraya ve buraya bakın). Bu nedenle, Google (duh!) Adlı kendi apk imzalayıcısınıapksigner uygulamıştır . Komut dosyası bulunabilir %ANDROID_HOME%/sdk/build-tools/24.0.3/(.jar /libalt klasördedir). Bunu böyle kullan

apksigner sign --ks my.keystore my-app.apk --ks-key-alias alias_name

ve ile doğrulanabilir

apksigner verify my-app.apk

Resmi belgeler burada bulunabilir.


6
Uber-apk-imzalayan için teşekkürler! Harika bir araç!
kanton

2
Build-tools 24.0.3 için zipalign'ı çağırmanın doğru yolu: zipalign -p 4 my.apk my-align.apk
kinORnirvana

Açıklamanız için teşekkürler! Önce uber-apk-imzalayıcısını denedim ama başarısız oldu çünkü sistemimde oracles "official" java yerine openJDK yüklü. Bu yüzden manuel yolu denedim ve başarısız oldum (hala aynı hata [INSTALL_PARSE_FAILED_NO_CERTIFICATES]). Uber-apk-imzalayan ile doğrulama, bana biraz daha fazla fikir verdi signature VERIFY FAILED[...] ERROR: JAR signer CERT.RSA: JAR signature META-INF/CERT.RSA uses digest algorithm 2.16.840.1.101.3.4.2.1 and signature algorithm 1.2.840.113549.1.1.1 which is not supported on API Levels [[15, 17]]. Evet, android 4.2.2, SHA256 yok mu? fikir?
antiplex

@antiplex lütfen sorunu github'da bildirin SO değil
Patrick Favre

@ for3st, sorunlarımın apk imzalama konusundaki sınırlı bilgimden değil, uber-apk-imzalayanın bir tür uyumsuzluğundan kaynaklanabileceğini mi söylüyorsunuz? ancak o zaman bile, aracınızla alakasız görünen manuel yol da başarısız oluyor ...
antiplex

14

en hızlı yol, hata ayıklama anahtar deposu ile imzalamaktır:

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore ~/.android/debug.keystore app.apk androiddebugkey -storepass android

veya Windows'ta:

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore %USERPROFILE%/.android/debug.keystore test.apk androiddebugkey -storepass android


4

Her proje için düzenlemek üzere bir yarasa dosyası oluşturmak istemeyenler veya keytools ve jarsigner programları ile ilişkili tüm komutları hatırlamak istemeyenler ve bunu sadece bir işlemde yapmak isteyenler için bu programı kullanın:

http://lukealderton.com/projects/programs/android-apk-signer-aligner.aspx

Bunu oluşturdum çünkü her seferinde tüm dosya konumlarını yazmak zorunda kaldığım uzun süreçten bıkmıştım.

Bu program yapılandırmanızı kaydedebilir, böylece bir dahaki sefere başlattığınızda, Oluştur'a basmanız yeterlidir ve sizin için halleder. Bu kadar.

Kurulum gerekmez, tamamen taşınabilirdir ve yapılandırmalarını aynı klasöre bir CSV'ye kaydeder.


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.