Android APK'sının sürüm sertifikası ile imzalandığını nasıl doğrularım?


222

Android apk sürümünün hata ayıklama sertifikasıyla değil, bir sürümle imzalandığını nasıl kontrol edebilirim?


6
Bir anahtar deposuna karşı bir apk doğrulayacak bir senaryo yazdım .
JohnnyLambada

sizinkine sahipseniz cevabı kabul edin.
Rinkal Bhanderi

@JohnnyLambada Senaryonuzu Mac'te nasıl çalıştırabilirim?
Aaron Azhari

1
@JohnnyLambada Senaryonuzu nasıl çalıştırabilirim?
sunil

@sunil Yeni bir bash işlevi oluşturan bir bash betiğidir. bağlantıyı takip edip bir dosyaya yapıştırın source thatfile. Koddaki yorumlar, nasıl çalıştırılacağını açıklar.
JohnnyLambada

Yanıtlar:


372

Bu komutu kullanın (cmd isteminde java <jdk <bin yoluna gidin)

$ jarsigner -verify -verbose -certs my_application.apk

"CN = Android Hata Ayıklama" ifadesini görüyorsanız, .apk, Android SDK tarafından oluşturulan hata ayıklama anahtarıyla imzalanmış demektir (imzasız olduğu anlamına gelir), aksi takdirde CN için bir şeyler bulacaksınız. Daha fazla ayrıntı için bkz. Http://developer.android.com/guide/publishing/app-signing.html


1
2 fark apk dosyaları için komut yürütme sonunda doğrulanmış kavanoz olarak mesajı aldım. ama 1 apk için CN = "android hata ayıklama" verir ve diğer apk için farklı olan. 1 imzaladı biliyordu.
iRunner

3
Bu imzayı nasıl doğrular? Sistemin güvenilir CA'larını kullanacak mı? Yoksa bu sadece jar dosyalarının bütünlüğünü kontrol etmek için bir araçtır? Teşekkür ederim
Mostafa Shahverdy

2
this means the .apk was signed with the debug key generated by the Android SDK (means it is unsigned)- Bu imzasız olduğu anlamına gelmez. Az önce yazdığınız anlamına gelir - hata ayıklama anahtarıyla imzalanır.
Dmitry Zaytsev

3
Kuruluş, konum vb. İçin aynı değerlere sahip olan dosyalarla değil, aynı sertifika dosyasıyla imzalandığını nasıl kontrol edebiliriz?
OlivierM

1
Teşekkürler. Bu yüzden jarsigner -verify -verbose -certs myapp.apk | grep CN= | less"CN = Android Debug" ı görmemeliyiz.
rpattabi

70

Konsol komutunu kullan:

apksigner verify --print-certs application-development-release.apk

Apksigner'ı ../sdk/build-tools/24.0.3/apksigner.bat adresinde bulabilirsiniz. Yalnızca 24.0.3 ve üstü sürüm araçları için.

Google dokümanlarını da okuyun: https://developer.android.com/studio/command-line/apksigner.html


Bulduğum apksigner`de% LOCALAPPDATA% \ Android \ sdk \ birikmesi aletler \ 25.0.3` (ve diğer her yapı araçları sürüm I yüklü olan)
Jon

2
Oluşturma araçlarının apksignersürümünde eksik olduğunu unutmayın 26.0.0. İssuetracker.google.com/issues/62696222 adresinde izlenir ve sonraki sürümde düzeltilmesi gerekir. O zamana kadar geçici çözüm kullanmaktır apksignerdan 25.0.3.
friederbluemle

2
Güncelleme: apksignerversiyona dahil26.0.1
forresthopkinsa

Güncelleme: APKSigner ayrıca 26.0.2, 26.0.3, 27.0.0, 27.0.1, 27.0.2'de. Gelecek sürümlerde bulacağınıza inanıyorum :)
Kirill Vashilo

2
ayrıntılı çıktı kullanımı için -v:./apksigner verify --print-certs -v ~/Downloads/MyAppHere.apk
Tilo

59

Bu komutu kullanın: (Jarsigner, Java bin klasörünüzde goto java-> jdk-> bin yolunda cmd isteminde bulunur)

$ jarsigner -verify my_signed.apk

.Apk doğru imzalanmışsa, Jarsigner "kavanoz doğrulandı" yazdırır


13
Bu hem hata ayıklama hem de serbest bırakma apks imzalı "jar doğrulanmış" verecektir çünkü yeterince iyi değil. @ Anass'ın cevabının ayrıntılarını kontrol edin.
rpattabi

Tam olarak bu komutu denedim ve doğrulandı. Daha sonra bir deneme olarak APK'ya girdim ve sig dosyaları ve manifest dışında her dosyayı tam olarak sildim ve hala doğrulandı. Yani burada bir şeyler çok yanlış. Ancak @ Anass'ın cevabını henüz denemedim.
orblivion

39

En kolayı:

keytool -list -printcert -jarfile file.apk

Bu, Java yerleşik keytool uygulamasını kullanır ve ayıklama veya herhangi bir oluşturma aracı yüklemesi gerektirmez.


Koşamam herkes için keytoolderhal kontrol bu ve belki eklemeyi deneyin %JAVA_HOME%\binyoluna
TT--

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.