APK, önceki sürümle aynı sertifikalarla imzalanmalıdır


202

Uygulamamı bir süre önce Google Play'e (Android Market olarak adlandırıldığında) yükledim.

Bugün uygulamayı güncelledim, ancak önceki anahtar deposunu sildim ve yeni bir tane oluşturdum.
Yüklerken, APK'nın önceki sürümle aynı sertifikalarla imzalanması gerektiğini söylüyor:

Yükleme başarısız

Önceki APK'larınıza farklı bir sertifika ile imzalanmış bir APK yüklediniz. Aynı sertifikayı kullanmalısınız.

Mevcut APK'larınız parmak iziyle sertifikalarla imzalandı:
[SHA1: 89: 2F: 11: FE: CE: D6: CC: DF: 65: E7: 76: 3E: DD: A7: 96: 4F: 84: DD: BA: 33]
ve yüklediğiniz APK'yı imzalamak için kullanılan sertifikaların parmak izleri var:
[SHA1: 20: 26: F4: C1: DF: 0F: 2B: D9: 46: 03: FF: AB: 07: B1: 28: 7B: 9C: 75: 44: CC]

Ancak bu sertifikam yok ve etkin kullanıcıları olduğu için uygulamayı silmek ve yeniden yayınlamak istemiyorum.

Uygulamamı yeni sertifika ile imzalamak için ne yapabilirim?


26
Farklı bir sorun yaşıyorum: Bir uygulamayı yeni sürüme geçirmeye çalıştım ama bu hatayı söylemeye devam ediyor. Gerçek şu ki, anahtar deposunu hiç değiştirmedim !!! Ne yapabilirim?!?
Mariux

nasıl çözdün ??
Elizabeth

@ int_32 nasıl çözerim ??
Amit Sharma

Yanıtlar:


187

Hiçbir şey değil. Belgeleri okuyun: Güncellemeleri Android Market'te Yayınlama

Güncellenmiş uygulamayı yüklemeden önce, manifest dosyasının öğesindeki android: versionCode ve android: versionName özniteliklerini artırdığınızdan emin olun. Ayrıca, paket adı aynı olmalı ve .apk aynı özel anahtarla imzalanmış olmalıdır. Paket adı ve imzalama sertifikası mevcut sürümle eşleşmiyorsa, Market bunu yeni bir uygulama olarak görür ve kullanıcılara güncelleme olarak sunmaz.


14
Mükemmel cevap. Anahtar kaybolursa o zaman uygulama güncellenemez olduğunu asla fark ettim. Anahtarı güvenli bir yerde yedeklemeyi unutmayın.
Peter Knego

18
Normalde yapacağım anahtar deposu dosyasını svn'de saklamak. Trunk / tag / branch ile birlikte kimlik bilgisi adlı yeni bir klasör koyun ve anahtar deposu dosyasını orada saklayın. Ayrıca anahtar deposu dosyasını belirten yeni bir .txt dosyası ekleyin. Anahtar deposu kaynak kodu kadar önemlidir . Kaybolduktan sonra (veya şifreyi unuttuysanız)
VİDAYSINIZ

42
Lütfen YAPMAYIN @Krishnabhadra söylediği gibi, kaynak denetimi içine deposu şifre (ya da bu konuda herhangi şifreleri) kontrol edin. Anahtar deposunu ve parolayı ayrı ve parolayı güvenli tutun.
Christopher Orr

1
Ne?! Ama sadece anahtarımın çok eski olduğunu söyledi, bu yüzden sildim ve şimdi yeni bir tane oluşturdum !?

2
@iwayneo Derleme sistemi, hata ayıklama anahtarınızın çok eski olduğunu söylemiş olabilir , ancak Google Play'in Ekim 2033'ten önce sona eren anahtarları reddetmesi gerektiğinden, bir serbest bırakma anahtarıyla gerçekleşmesi pek olası değildir .
Christopher Orr

127

Hata ayıklama anahtarıyla yanlışlıkla mı imzaladınız?

Google Play, hata ayıklama anahtar deponuzla imzalanmış bir uygulama yayınlamanıza izin vermez. Böyle bir APK yüklemeye çalışırsanız, Google Play "Hata ayıklama modunda imzalanmış bir APK yüklediniz. APK'nızı yayın modunda imzalamanız gerekir.

Bir yüklemeye çalıştığınızda Ancak, güncelleştirme ayıklama keystore'da ile imzalanır, olur değil bu mesajı görebilirsiniz; Google Play, SHA1 parmak izlerine atıfta bulunarak soruda gösterilen mesajı görüntüler.

Öncelikle, uygulamayı yanlışlıkla hata ayıklama anahtarınızla imzalayıp imzalamadığınızı kontrol edin.


Hangi imzalama anahtarlarının kullanıldığını nasıl kontrol ederim?

APK'dan bilgi toplayın

Java kullanarak şu komutları kullanarak orijinal APK ve güncelleme APK'sının hangi sertifikalarla imzalandığını kontrol edebilirsiniz keytool:

keytool -list -printcert -jarfile original.apk
keytool -list -printcert -jarfile update.apk

Bu, bir APK'nın nasıl imzalandığı hakkında ayrıntılı bilgileri gösterir, örneğin:

Owner: CN=My App, O=My Company, L=Somewhere, C=DE
Issuer: CN=My App, O=My Company, L=Somewhere, C=DE
Serial number: 4790b086
Valid from: Mon Nov 11 15:01:28 GMT 2013 until: Fri Mar 29 16:01:28 BST 2041
Certificate fingerprints:
  MD5:  A3:2E:67:AF:74:3A:BD:DD:A2:A9:0D:CA:6C:D4:AF:20
  SHA1: A6:E7:CE:64:17:45:0F:B4:C7:FC:76:43:90:04:DC:A7:84:EF:33:E9
  SHA256: FB:6C:59:9E:B4:58:E3:62:AD:81:42:...:09:FC:BC:FE:E7:40:53:C3:D8:14:4F
         Signature algorithm name: SHA256withRSA
         Version: 3

Burada dikkat edilmesi gereken önemli kısımlar - her bir APK için - SHA1 parmak izi değeri, Sahip kimliği değeri ve tarihlerden / tarihlerine kadar geçerlidir .


Bu keytoolkomut işe yaramazsa ( -jarfileseçenek Java 7 gerektirir), jarsignerkomutla daha temel bilgiler alabilirsiniz :

jarsigner -verify -verbose:summary -certs original.apk
jarsigner -verify -verbose:summary -certs update.apk

Bu maalesef SHA1 parmak izini göstermez, ancak sertifikanın sona erme tarihleriyle birlikte X.509 sahip kimliğini gösterir. Örneğin:

sm  4642892 Thu Apr 17 10:57:44 CEST 2014 classes.dex (and 412 more)

    X.509, CN=My App, O=My Company, L=Somewhere, C=DE
    [certificate is valid from 11/11/13 12:12 to 29/03/41 12:12]
    [CertPath not validated: Path does not chain with any of the trust anchors]

Sertifika zincirleri veya zaman damgaları hakkındaki uyarıların yanı sıra "CertPath doğrulanmadı" iletilerini yok sayabilirsiniz; bu durumda alakalı değiller.

APK'lar arasında Sahip, SHA1 ve Vade değerlerini karşılaştırın

  • Eğer Sahibi / X.509 kimlik değeridir CN=Android Debug, O=Android, C=US, o zaman birlikte APK imzalayan ayıklama tuşu , orijinal açma anahtarı

  • Eğer SHA1 parmak izi değeri orijinal ve güncelleme APK'ların arasında farklı, o zaman yoktu değil hem APK'lerin aynı imzalama anahtarı kullanmak

  • Eğer Sahibinin / X.509 kimlik değerleri farklıdır veya sertifika geçerlilik tarihleri iki APK'lar arasında farklılık, o zaman yoktu değil hem APK'lerin aynı imzalama anahtarı kullanmak

Sahip / X.509 değerleri iki sertifika arasında aynı olsa bile, bunun sertifikaların aynı olduğu anlamına gelmez - parmak izi değerleri gibi başka bir şey eşleşmezse - sertifikalar farklıdır.


Orijinal anahtar deposunu arayın, yedekleri kontrol edin

İki APK'nın farklı sertifika bilgileri varsa, gerekir orijinal anahtar deposunu bulmak, Google Play, (veya bu ilk SHA1 parmak izi değeri ile dosyası yani keytool) demiştim.

Doğru SHA1 parmak izine sahip olana kadar bilgisayarınızda ve tüm yedeklemelerde bulabileceğiniz tüm anahtar deposu dosyalarında arama yapın:

keytool -list -keystore my-release.keystore

Sadece basın EnterŞifre istenirse ; yalnızca SHA1 değerini hızlı bir şekilde kontrol etmek istiyorsanız şifreyi girmeniz gerekmez.


Orijinal anahtar deposunu hiçbir yerde bulamıyorum

Orijinal anahtar deposunu bulamazsanız, asla bu özel uygulaması için tüm güncelleştirmeleri yayınlamak mümkün.

Android, Açıkça Başvurunuzu İmzalama sayfasında bahsetmektedir :

Uyarı: Anahtar deponuzu ve özel anahtarınızı güvenli bir yerde saklayın ve güvenli yedeklerine sahip olduğunuzdan emin olun. Google Play'de bir uygulama yayınlar ve ardından uygulamanızı imzaladığınız anahtarı kaybederseniz, uygulamanızın tüm sürümlerini her zaman aynı anahtarla imzalamanız gerektiğinden uygulamanızda herhangi bir güncelleme yayınlayamazsınız.

Bir APK'nın ilk sürümünden sonra, sonraki tüm sürümler aynı anahtarla imzalanmalıdır.


Orijinal imzalama anahtarını orijinal APK'dan çıkarabilir miyim?

Hayır, bu mümkün değil. APK, özel anahtar bilgilerinizi değil, yalnızca genel bilgileri içerir.


Yeni bir imzalama anahtarına geçebilir miyim?

Hayır. Orijinali bulsanız bile, A tuşuyla bir APK imzalayamazsınız, ardından bir sonraki güncellemeyi A ve B tuşlarıyla imzalayamazsınız, ardından bir sonraki güncellemeyi yalnızca B tuşuyla imzalayamazsınız.

Bir APK'yı (veya herhangi bir JAR dosyasını) birden çok anahtarla imzalamak teknik olarak mümkündür, ancak Google Play artık birden çok imzası olan APK'ları kabul etmemektedir.

Bunu yapmaya çalıştığınızda "APK'nız birden çok sertifikayla imzalandı. Lütfen yalnızca bir sertifikayla imzalayın ve tekrar yükleyin."


Ne yapabilirim?

Uygulamanızı yeni bir uygulama kimliğiyle (ör. "Com.example.myapp" yerine "com.example.myapp2" olarak değiştirmeniz) ve Google Play'de yeni bir giriş oluşturmanız gerekir.

Muhtemelen, eski uygulamayı yüklemiş olsalar bile insanların yeni uygulamayı yükleyebilmeleri için kodunuzu değiştirmeniz gerekecektir; örneğin, çakışan içerik sağlayıcılarınızın olmadığından emin olmanız gerekir.

Mevcut yükleme tabanınızı, incelemelerinizi vb. Kaybedersiniz ve mevcut müşterilerinizin eski uygulamayı kaldırmasını ve yeni sürümü yüklemesini sağlamanın bir yolunu bulmanız gerekir.

Yine, bu sürüm için kullandığınız anahtar deposunun ve parolaların güvenli yedeklemelerine sahip olduğunuzdan emin olun.


Verdiğiniz komutu denedim, hata ayıklama (ki aslında aradığını) kontrol etmek için, ama kavanoz bir zaman damgası içermeyen imzalar içeren bir hata döndürür. Bu konuyu kullanarak
apk'mi

@RageCompex Çıktınız ve yalnızca bir hata mı alıyorsunuz? Bu komutu çalıştırdığımda, zaman damgası uyarısı da alıyorum (hata değil). X.509 çıktısını aldığınız sürece, ihtiyacınız olan tek şey bu.
Christopher Orr

Evet, X.509 çıktısını alıyorum, bu yüzden sanırım bir sorun değil mi? Ne hakkında [CertPath not validated: Path does not chain with any of the trust anchors], sorun değil eather? Ben de ismimi görüyorum CNben düzgün :) imzaladım tahmin yüzden
CularBytes

@RageCompex Bu, "Kullanılan imzalama anahtarlarını kontrol et" bölümünde zaten yanıtlanmıştır.
Christopher Orr

Bugün küçük bir kalp krizi geçirdim. Gizli Komut Mağazası'nı bulmak için bu komut satırlarını kullandım. Çok teşekkürler dostum! Beni kurtardın ... Gerçekten: D
Ajeet

11

Hiçbir şey - Google, uygulamanın imzalamak için kullanılan tuşlarla tanımlandığını açıkça söylüyor. Sonuç olarak anahtarları kaybettiyseniz, yeni bir uygulama oluşturmanız gerekir.


1
@sports Onlar yapmak sizi uyarır. Büyük kırmızı Uyarı mesajına dikkat edin : developer.android.com/tools/publishing/…
Christopher Orr

2
@sports Her durumda, aynı geliştirici hesabında birden fazla uygulama yayınlayabilirsiniz, böylece tekrar ödeme yapmanız gerekmez.
Christopher Orr

7

Bugün aynı sorunla karşı karşıya kaldım, maalesef anahtar deposu dosyamda iki takma ad vardı.resim açıklamasını buraya girin


7

Ben bunu açık maviden çıkardım. Gerçekten bir şey değiştirdiğimi sanmıyorum.

Ancak, Build => Clean Projectdüzeltildi.


1
Hmm, 1 hafta geçirdim, mümkün olan her şeyi yaptım. ve "WTF" deme zamanı, ama yardımcı olan tek şey bu. (Ben de yardımcı
olmadı

1
Bu, bir saat boyunca çıldırdıktan sonra sorunu çözdü
Boris Legovic

Bunun için teşekkürler; Bu gerçek bir hayat kurtarıcı!
Ian Mbae

Bunun ilgili olduğunu görmüyorum.
Sonsuz Döngüler

Çok teşekkürler!. Yanlışlıkla farklı anahtar deposu dosyası ve kimlik bilgileriyle imzalı bir apk oluşturdum ve yükledim. Doğru anahtar deposu ile apk yükledikten sonra bile aynı hatayı almaya devam ettim. Geçersiz önbellek, android stüdyo ve PC yeniden başlatmalarla yeni sürümler oluşturduktan bir saat sonra, bu nihayet düzeltildi.
Arun

5

İşte bu sorunun cevabını alıyorum. Çok uzun süre aradıktan sonra sonunda bunun için anahtar ve şifre kırmak olsun. Benim anahtar ve takma ad da jks dosyasını unutmak ama neyse ki ben koymak ne parola demet biliyorum. ama bunun için doğru kombinasyonları bulmak benim için en zor işti.

Çözüm - Bunu indirin - Keytool IUI sürüm 2.4.1 eklentisi resim açıklamasını buraya girin

pencere şimdi açılır diğer adı gösterir .. jks dosyası doğruysa .. diğer adı sağ tıklayın ve "sertifikaları zincirini göster" .. SHA1 anahtarını gösterecektir .. Bu anahtarı aldığınız bu anahtar ile eşleştirin apk'yi google app store'a yüklerken ...

Eğer eşleşirse o zaman doğru jks dosyası ve takma ad ile birliktesiniz ..

şimdi şanslı maç için şifre demet var .. resim açıklamasını buraya girin

şimdi bu scrren gidin aynı jks yol koymak .. ve şifre (sahip şifre arasında) "Sertifika dosyası" herhangi bir yol koymak

ekran herhangi bir hata gösterirse o zaman şifre eşleşmiyor .. herhangi bir hata göstermezse o zaman doğru jks dosyası ile demektir. şimdi takma ad ve şifre () şimdi senin apk play store yükleyebilirsiniz ile :)


özel anahtarı kaybettiniz ve bu şekilde geri alabildiniz mi? Cevabınız evet ise, aracı nereye indireceğinizi bağlamanız mümkün mü? Ve uygulamayı nasıl açabilirim?
LS_

4

Daha önce bir apk dosyanız varsa (yedekleme) o apk'den sertifika almak için jarSigner kullanın, sonra o anahtarı kullanın veya bu sertifikayı klonlamak için keytool kullanın, yardımcı olabilir ... Yardımcı bağlantılar jarsigner dokümanlar ve keytool dokümanlardır .


5
".. jarSigner'ı bu apk sertifikası almak için kullanın" - Bize bunun nasıl yapılacağını söyle?
Rubycon

14
Bu, apk'yi tekrar imzalamanız gereken özel anahtarı kurtarmaz.
botteaap

Apk aynı özel anahtarla imzalanmalıdır
om252345

3

Anahtar deponuza Google Play'e yüklemenize gerek kalmadan erişmenizi sağlayan Keystore Explorer'ı ( https://keystore-explorer.org/ ) tavsiye ederim . Bu şekilde, şifrenizi yanlış girip girmediğinizi giderebilirsiniz.


1

Yeni bir anahtar dosyası oluşturmak için yeni özellik Google play uygulaması imzalamayı kullanabilirsiniz.

Mayıs 2017'den sonra Google Play Store, Play Store'a yeni bir özellik ekledi ve Android Geliştiricileri İçin İyi Haber. Bu özellikten Geliştirici, bir KeyStore dosyasını kaybeden uygulamalarını veya Apk'lerini güncelleyebilir. Play Store konsolunda Google Play uygulama imzalamayı etkinleştirmeniz gerekir.

https://support.google.com/googleplay/android-developer/answer/7384423?hl=en

http://www.geekcodehub.com/2018/05/23/keystore-lost-in-android/


0

Yakın zamanda bu sorunla karşılaştım, V1 veya V2'yi etkinleştirmek gibi farklı yollarla denedikten sonra, takma ad adını değiştirerek oturum açtım ve son olarak yanlış anahtar deposu dosyası kullandığımı öğrendim


0

Benim [aptal] hata ben app-release.apk dosyası yerine app-debug.apk dosyası kullandım oldu. İmzalı APK oluştururken "Sürüm Varyantları" çerçevesinde "sürümü" seçmeniz gerekir. App-release.apk dosyası proje kökünüzdeki "app \ release" klasörü altında bulunmalıdır.

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.