क्या आपने गलती से डिबग कुंजी के साथ हस्ताक्षर किया था?
Google Play आपको अपने डीबग कीस्टोर के साथ साइन किए गए ऐप को प्रकाशित करने की अनुमति नहीं देता है। यदि आप इस तरह के एपीके को अपलोड करने का प्रयास करते हैं, तो Google Play संदेश के साथ विफल हो जाएगा "आपने एक एपीके अपलोड किया था जिसे डीबग मोड में साइन इन किया गया था। आपको अपने एपीके को रिलीज़ मोड में साइन इन करना होगा।"
हालाँकि, यदि आप एक अद्यतन अपलोड करने का प्रयास करते हैं जो डीबग कीस्टोर के साथ हस्ताक्षरित है, तो आपको यह संदेश दिखाई नहीं देगा ; Google Play प्रश्न में दिखाए गए संदेश को SHA1 फ़िंगरप्रिंट्स का उल्लेख करते हुए प्रदर्शित करेगा।
इसलिए सबसे पहले, जांच लें कि क्या आपने गलती से अपनी डिबग कुंजी के साथ एप्लिकेशन पर हस्ताक्षर किए हैं।
मैं कैसे जांच करूं कि कौन सी हस्ताक्षर कुंजी का उपयोग किया गया था?
एपीके से जानकारी जुटाएं
आप जावा का उपयोग करके इन आदेशों का उपयोग करके मूल एपीके और अपडेट एपीके के साथ कौन से प्रमाणपत्र पर हस्ताक्षर किए गए थे, इसकी जांच कर सकते हैं keytool
:
keytool -list -printcert -jarfile original.apk
keytool -list -printcert -jarfile update.apk
यह आपको उदाहरण के बारे में विस्तृत जानकारी दिखाता है कि कैसे एक एपीके साइन किया गया था, उदाहरण के लिए:
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
नोट करने के लिए महत्वपूर्ण भाग - प्रत्येक APK के लिए - SHA1 फ़िंगरप्रिंट मान, स्वामी पहचान मान, और दिनांक से या मान्य हैं ।
यदि वह keytool
कमांड काम नहीं करता है ( -jarfile
विकल्प के लिए जावा 7 की आवश्यकता है), तो आप jarsigner
कमांड के माध्यम से अधिक बुनियादी जानकारी प्राप्त कर सकते हैं :
jarsigner -verify -verbose:summary -certs original.apk
jarsigner -verify -verbose:summary -certs update.apk
यह दुर्भाग्य से SHA1 फिंगरप्रिंट नहीं दिखाता है, लेकिन प्रमाणपत्र की समाप्ति तिथियों के साथ X.509 मालिक की पहचान दिखाता है। उदाहरण के लिए:
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]
आप प्रमाण पत्र श्रृंखला या टाइमस्टैम्प के बारे में चेतावनी के साथ, किसी भी "सर्टिफिकेट वेरिफाइड नॉट" संदेश को अनदेखा कर सकते हैं; वे इस मामले में प्रासंगिक नहीं हैं।
APK के बीच स्वामी, SHA1 और समाप्ति मूल्यों की तुलना करें
यदि स्वामी / X.509 पहचान मूल्य है CN=Android Debug, O=Android, C=US
, तो आपने एपीके को अपने डिबग कुंजी के साथ हस्ताक्षरित किया है , न कि मूल रिलीज़ कुंजी
यदि SHA1 फ़िंगरप्रिंट मान मूल और अपडेट APK के बीच भिन्न है, तो आपने दोनों APK के लिए एक ही हस्ताक्षर कुंजी का उपयोग नहीं किया
यदि स्वामी / X.509 पहचान मूल्य अलग-अलग हैं, या प्रमाणपत्र की समाप्ति की तारीखें दो APK के बीच भिन्न हैं, तो आपने दोनों APK के लिए एक ही हस्ताक्षर कुंजी का उपयोग नहीं किया
ध्यान दें कि भले ही दो प्रमाणपत्रों के बीच स्वामी / X.509 मान समान हैं, लेकिन इसका मतलब यह नहीं है कि प्रमाण पत्र समान हैं - अगर कुछ और मेल नहीं खाता है - जैसे कि फिंगरप्रिंट मान - तो प्रमाण पत्र अलग हैं।
मूल कीस्टोर के लिए खोजें, बैकअप जांचें
यदि दो एपीके में अलग-अलग प्रमाण पत्र की जानकारी है, तो आपको मूल कीस्टोर को ढूंढना होगा , अर्थात पहले SHA1 फिंगरप्रिंट मान वाली फ़ाइल जिसे Google Play (या keytool
) ने आपको बताया था।
उन सभी कीस्टॉर फ़ाइलों के माध्यम से खोजें जिन्हें आप अपने कंप्यूटर पर पा सकते हैं, और आपके पास किसी भी बैकअप में, जब तक कि आपके पास सही SHA1 फिंगरप्रिंट नहीं है:
keytool -list -keystore my-release.keystore
Enterयदि पासवर्ड के लिए कहा जाए तो बस दबाएं - यदि आपको SHA1 मान को जल्दी से जांचना है, तो आपको इसे दर्ज करने की आवश्यकता नहीं है।
मुझे कहीं भी मूल कीस्टॉर नहीं मिल रहा है
यदि आपको मूल कीस्टॉर नहीं मिल रहा है, तो आप कभी भी इस विशेष ऐप में कोई अपडेट प्रकाशित नहीं कर पाएंगे।
Android आपके हस्ताक्षर पृष्ठ पर स्पष्ट रूप से इसका उल्लेख करता है :
चेतावनी: अपनी कीस्टोर और निजी कुंजी को सुरक्षित और सुरक्षित जगह पर रखें, और सुनिश्चित करें कि आपके पास उनमें से सुरक्षित बैकअप है। यदि आप Google Play पर एक ऐप प्रकाशित करते हैं और फिर उस कुंजी को खो देते हैं जिसके साथ आपने अपने ऐप पर हस्ताक्षर किए हैं, तो आप अपने ऐप पर कोई भी अपडेट प्रकाशित नहीं कर पाएंगे, क्योंकि आपको हमेशा एक ही कुंजी के साथ अपने ऐप के सभी संस्करणों पर हस्ताक्षर करना होगा।
एपीके की पहली रिलीज़ के बाद, सभी बाद की रिलीज़ को उसी कुंजी के साथ हस्ताक्षरित किया जाना चाहिए।
क्या मैं मूल एपीके से मूल हस्ताक्षर कुंजी निकाल सकता हूं?
नहीं, यह संभव नहीं है। एपीके में केवल सार्वजनिक जानकारी होती है, न कि आपकी निजी महत्वपूर्ण जानकारी।
क्या मैं एक नई हस्ताक्षर कुंजी में माइग्रेट कर सकता हूं?
नहीं, यदि आप मूल पाते हैं, तो आप कुंजी A के साथ एक एपीके साइन नहीं कर सकते हैं, फिर दोनों कुंजियों A और B के साथ अगला अद्यतन करें, उसके बाद अगला अद्यतन केवल कुंजी B के साथ हस्ताक्षर करें।
एकाधिक कुंजियों के साथ एक एपीके (या किसी भी JAR फ़ाइल) पर हस्ताक्षर करना तकनीकी रूप से संभव है, लेकिन Google Play अब कई हस्ताक्षरों के साथ APK स्वीकार नहीं करता है।
ऐसा करने का प्रयास करने से संदेश "आपके APK को कई प्रमाणपत्रों के साथ साइन किया गया है। कृपया केवल इसे एक प्रमाणपत्र के साथ साइन करें और इसे फिर से अपलोड करें।"
मैं क्या कर सकता हूँ?
आपको एक नया एप्लिकेशन आईडी (उदाहरण के लिए "com.example.myapp" से "com.example.myapp2" में परिवर्तन) के साथ अपना ऐप बनाना होगा और Google Play पर एक ब्रांड नई सूची बनानी होगी।
संभवतः आपको अपना कोड भी बदलना होगा ताकि लोग नया ऐप इंस्टॉल कर सकें, भले ही उनके पास पुराना ऐप इंस्टॉल हो, जैसे आपको यह सुनिश्चित करने की ज़रूरत है कि आपके पास परस्पर विरोधी सामग्री प्रदाता नहीं हैं।
आप अपने मौजूदा इंस्टॉल बेस, रिव्यू आदि को खो देंगे, और आपको अपने मौजूदा ग्राहकों को पुराने ऐप को अनइंस्टॉल करने और नया वर्जन इंस्टॉल करने का तरीका खोजना होगा।
फिर से, सुनिश्चित करें कि आपके पास इस संस्करण के लिए उपयोग किए जाने वाले किस्टोर और पासवर्ड के सुरक्षित बैकअप हैं।