Apakah Anda masuk dengan tombol debug karena kesalahan?
Google Play tidak memungkinkan Anda untuk mempublikasikan aplikasi yang ditandatangani dengan keystore debug Anda. Jika Anda mencoba mengunggah APK seperti itu, Google Play akan gagal dengan pesan "Anda mengunggah APK yang masuk dalam mode debug. Anda harus masuk APK dalam mode rilis."
Namun, jika Anda mencoba mengunggah pembaruan yang ditandatangani dengan keystore debug, Anda tidak akan melihat pesan ini; Google Play akan menampilkan pesan yang ditampilkan dalam pertanyaan, merujuk pada sidik jari SHA1.
Jadi pertama-tama, periksa apakah Anda menandatangani aplikasi dengan kunci debug secara tidak sengaja.
Bagaimana cara saya memeriksa kunci masuk mana yang digunakan?
Kumpulkan informasi dari APK
Anda dapat memeriksa sertifikat mana APK asli dan pembaruan APK ditandatangani dengan menggunakan perintah ini, menggunakan Java keytool
:
keytool -list -printcert -jarfile original.apk
keytool -list -printcert -jarfile update.apk
Ini menunjukkan kepada Anda informasi terperinci tentang cara penandatanganan APK, misalnya:
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
Bagian penting yang perlu diperhatikan di sini - untuk setiap APK - adalah nilai sidik jari SHA1 , nilai identitas Pemilik , dan Valid dari / hingga tanggal.
Jika keytool
perintah itu tidak berfungsi ( -jarfile
opsi ini membutuhkan Java 7), Anda bisa mendapatkan lebih banyak informasi dasar melalui jarsigner
perintah:
jarsigner -verify -verbose:summary -certs original.apk
jarsigner -verify -verbose:summary -certs update.apk
Sayangnya ini tidak menunjukkan sidik jari SHA1, tetapi menunjukkan identitas pemilik X.509, bersama dengan tanggal kedaluwarsa sertifikat. Sebagai contoh:
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]
Anda dapat mengabaikan pesan "CertPath tidak divalidasi", bersama dengan peringatan tentang rantai sertifikat atau cap waktu; mereka tidak relevan dalam hal ini.
Bandingkan nilai Pemilik, SHA1, dan Kadaluwarsa antara APK
Jika nilai identitas Pemilik / X.509 adalah CN=Android Debug, O=Android, C=US
, maka Anda telah menandatangani APK dengan kunci debug Anda , bukan kunci rilis asli
Jika nilai sidik jari SHA1 berbeda antara yang asli dan yang diperbarui APK, maka Anda tidak menggunakan kunci penandatanganan yang sama untuk kedua APK
Jika nilai identitas Pemilik / X.509 berbeda, atau tanggal kedaluwarsa sertifikat berbeda antara kedua APK, maka Anda tidak menggunakan kunci penandatanganan yang sama untuk kedua APK
Perhatikan bahwa meskipun nilai Pemilik / X.509 identik antara kedua sertifikat, ini tidak berarti bahwa sertifikat tersebut identik - jika ada hal lain yang tidak cocok - seperti nilai sidik jari - maka sertifikat berbeda.
Cari keystore asli, periksa cadangan
Jika kedua APK memiliki informasi sertifikat yang berbeda, maka Anda harus menemukan keystore asli, yaitu file dengan nilai sidik jari SHA1 pertama yang Google Play (atau keytool
) katakan kepada Anda.
Cari melalui semua file keystore yang dapat Anda temukan di komputer Anda, dan dalam cadangan apa pun yang Anda miliki, sampai Anda memilikinya dengan sidik jari SHA1 yang benar:
keytool -list -keystore my-release.keystore
Cukup tekan Enterjika diminta kata sandi - Anda tidak harus memasukkannya jika Anda hanya ingin cepat memeriksa nilai SHA1.
Saya tidak dapat menemukan keystore asli di mana pun
Jika Anda tidak dapat menemukan keystore asli, Anda tidak akan pernah dapat mempublikasikan pembaruan apa pun ke aplikasi khusus ini.
Android menyebutkan ini secara eksplisit di halaman Menandatangani Aplikasi Anda :
Peringatan: Simpan kunci toko dan kunci pribadi Anda di tempat yang aman dan terlindungi, dan pastikan Anda memiliki cadangan yang aman. Jika Anda menerbitkan aplikasi ke Google Play dan kemudian kehilangan kunci yang Anda tandatangani aplikasi Anda, Anda tidak akan dapat mempublikasikan pembaruan untuk aplikasi Anda, karena Anda harus selalu menandatangani semua versi aplikasi Anda dengan kunci yang sama.
Setelah rilis pertama APK, semua rilis berikutnya harus ditandatangani dengan kunci yang sama persis.
Bisakah saya mengekstrak kunci tanda tangan asli dari APK asli?
Tidak, ini tidak mungkin. APK hanya berisi informasi publik, dan bukan informasi kunci pribadi Anda.
Bisakah saya bermigrasi ke kunci penandatanganan baru?
Tidak. Bahkan jika Anda menemukan yang asli, Anda tidak dapat menandatangani APK dengan kunci A, kemudian menandatangani pembaruan berikutnya dengan kedua tombol A dan B, kemudian menandatangani pembaruan berikutnya setelah itu hanya dengan tombol B.
Menandatangani APK (atau file JAR apa pun) dengan beberapa kunci secara teknis dimungkinkan, tetapi Google Play tidak lagi menerima APK dengan banyak tanda tangan.
Mencoba melakukannya akan menghasilkan pesan "APK Anda telah ditandatangani dengan beberapa sertifikat. Harap hanya menandatanganinya dengan satu sertifikat dan mengunggahnya lagi."
Apa yang dapat saya?
Anda harus membuat aplikasi Anda dengan ID aplikasi baru (mis., Ubah dari "com.example.myapp" menjadi "com.example.myapp2") dan buat daftar baru di Google Play.
Mungkin Anda juga harus mengubah kode Anda sehingga orang dapat menginstal aplikasi baru bahkan jika mereka memiliki aplikasi lama diinstal, misalnya Anda perlu memastikan bahwa Anda tidak memiliki penyedia konten yang saling bertentangan.
Anda akan kehilangan basis instalasi yang ada, ulasan, dll., Dan harus menemukan cara untuk membuat pelanggan Anda yang ada menghapus instalasi aplikasi lama dan menginstal versi baru.
Sekali lagi, pastikan Anda memiliki cadangan aman keystore dan kata sandi yang Anda gunakan untuk versi ini.