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 keytool
komut işe yaramazsa ( -jarfile
seçenek Java 7 gerektirir), jarsigner
komutla 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.