Apk को पिछले संस्करण के समान प्रमाणपत्रों के साथ हस्ताक्षरित किया जाना चाहिए


200

मैंने कुछ समय पहले अपना ऐप Google Play (जब इसे Android Market कहा जाता था) पर अपलोड किया था।

आज मैंने ऐप को अपडेट किया, लेकिन मैंने पिछले कीस्टॉर को हटा दिया था और एक नया बनाया था।
अपलोड करते समय, यह कहता है कि एपीके को पिछले संस्करण के समान प्रमाणपत्रों के साथ हस्ताक्षरित होना चाहिए:

अपलोड विफल

आपने एक एपीके अपलोड किया है जिसे आपके पिछले एपीके को एक अलग प्रमाणपत्र के साथ हस्ताक्षरित किया गया है। आपको एक ही प्रमाणपत्र का उपयोग करना चाहिए।

आपके मौजूदा APK को फ़िंगरप्रिंट (s):
[SHA1: 89: 2F: 11: FE: CE: D6: CC: DF: 65: E7: 76: 3E: DD: A7: 96: प्रमाणपत्र (ओं) के साथ हस्ताक्षरित हैं। 4F: 84: DD: BA: 33]
और आपके द्वारा अपलोड किए गए एपीके पर हस्ताक्षर करने के लिए उपयोग किए जाने वाले प्रमाणपत्र (नों) में फिंगरप्रिंट (s) है:
[SHA1: 20: 26: F4: C1: DF: 0F: 2B: D9: 46: 03: एफएफ: एबी: 07: बी 1: 28: 7 बी: 9 सी: 75: 44: सीसी]

लेकिन मेरे पास यह प्रमाणपत्र नहीं है, और मैं एप्लिकेशन को हटाना और फिर से प्रकाशित नहीं करना चाहता, क्योंकि इसमें सक्रिय उपयोगकर्ता हैं।

मैं अपने एप्लिकेशन को नए प्रमाणपत्र के साथ साइन इन करने के लिए क्या कर सकता हूं?


26
मेरे पास एक अलग मुद्दा है: मैंने एक ऐप को अपग्रेड करने की कोशिश की, लेकिन यह मुझे यह त्रुटि कह रहा है। तथ्य यह है, मैंने कीस्टोर कभी नहीं बदला है !!! मैं क्या कर सकता हूँ?!?
मारीक्स 11:27

आपने कैसे हल किया ??
एलिजाबेथ

@ int_32 आप इसे कैसे हल करेंगे ??
अमित शर्मा

जवाबों:


187

कुछ भी तो नहीं। प्रलेखन पढ़ें: एंड्रॉइड मार्केट पर प्रकाशन अपडेट

अपडेट किए गए एप्लिकेशन को अपलोड करने से पहले, सुनिश्चित करें कि आपने एंड्रॉइड: वर्जनकोड और एंड्रॉइड: वर्जननाम विशेषताओं को मैनिफ़ेस्ट फ़ाइल के तत्व में बढ़ा दिया है। साथ ही, पैकेज का नाम समान होना चाहिए और .apk को उसी निजी कुंजी के साथ हस्ताक्षरित होना चाहिए। यदि पैकेज का नाम और हस्ताक्षर प्रमाण पत्र मौजूदा संस्करण से मेल नहीं खाते हैं, तो बाजार इसे एक नया आवेदन मान लेगा और इसे अद्यतन के रूप में उपयोगकर्ताओं को प्रदान नहीं करेगा।


14
बहुत बढ़िया जवाब। मुझे कभी यह एहसास नहीं हुआ कि अगर चाबी खो जाती है तो ऐप को अपडेट नहीं किया जा सकता है। सुरक्षित स्थान पर कुंजी का बैकअप लेने के लिए ध्यान में रखना चाहिए।
पीटर केनेगो

18
मैं सामान्य रूप से svn में कीस्टोर फाइल को स्टोर करने के लिए क्या करूंगा। ट्रंक / टैग / शाखाओं के साथ, क्रेडेंशियल नाम का एक नया फ़ोल्डर रखें, और वहां कीस्टॉर फ़ाइल स्टोर करें। इसके अलावा कीस्टोर फ़ाइल को इंगित करने वाली एक नई .txt फ़ाइल जोड़ें। कीस्टोर सोर्स कोड जितना ही महत्वपूर्ण है । एक बार जब आप यह खो (या पासवर्ड भूल गए) आप स्क्रिव्ड .. हैं
Krishnabhadra

42
कृपया मत अपना कुंजी संग्रह पासवर्ड (या उस बात के लिए किसी भी पासवर्ड) स्रोत नियंत्रण में जाँच, के रूप में @Krishnabhadra कहते हैं। कीस्टोर और पासवर्ड अलग रखें, और पासवर्ड सुरक्षित।
क्रिस्टोफर ऑर्ट

1
क्या?! लेकिन यह सिर्फ मुझे बताया कि मेरी कुंजी बहुत पुरानी थी इसलिए मैंने इसे हटा दिया और एक नया बनाया अब मुझे यह मिल गया है !?

2
@iwayneo बिल्ड सिस्टम ने आपको बताया हो सकता है कि आपकी डिबग कुंजी बहुत पुरानी थी, लेकिन रिलीज़ कुंजी के साथ ऐसा होने की संभावना नहीं है , क्योंकि Google Play को उन कुंजियों को अस्वीकार करना चाहिए जो अक्टूबर 2033 से पहले समाप्त हो रही हैं ।
क्रिस्टोफर ऑयर

126

क्या आपने गलती से डिबग कुंजी के साथ हस्ताक्षर किया था?

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 पर एक ब्रांड नई सूची बनानी होगी।

संभवतः आपको अपना कोड भी बदलना होगा ताकि लोग नया ऐप इंस्टॉल कर सकें, भले ही उनके पास पुराना ऐप इंस्टॉल हो, जैसे आपको यह सुनिश्चित करने की ज़रूरत है कि आपके पास परस्पर विरोधी सामग्री प्रदाता नहीं हैं।

आप अपने मौजूदा इंस्टॉल बेस, रिव्यू आदि को खो देंगे, और आपको अपने मौजूदा ग्राहकों को पुराने ऐप को अनइंस्टॉल करने और नया वर्जन इंस्टॉल करने का तरीका खोजना होगा।

फिर से, सुनिश्चित करें कि आपके पास इस संस्करण के लिए उपयोग किए जाने वाले किस्टोर और पासवर्ड के सुरक्षित बैकअप हैं।


मैंने डिबग के लिए जाँच करने के लिए (जिसे मैं वास्तव में खोज रहा था) के लिए आपके द्वारा दी गई कमांड की कोशिश की है, लेकिन यह एक त्रुटि देता है कि जार में हस्ताक्षर शामिल हैं जिसमें टाइमस्टैम्प शामिल नहीं है। मैंने इस धागे का उपयोग करके अपनी
एपीके

@RageCompex क्या आपको कोई आउटपुट नहीं मिला है और केवल एक त्रुटि है? जब मैं वह कमांड चलाता हूं, तो मुझे टाइमस्टैम्प चेतावनी (त्रुटि नहीं) भी मिलती है। जब तक आप X.509 आउटपुट प्राप्त करते हैं, तब तक आपकी आवश्यकता है।
क्रिस्टोफर ओरल

हां, मुझे X.509 आउटपुट मिलता है, इसलिए मुझे लगता है कि यह कोई समस्या नहीं है? के बारे में क्या [CertPath not validated: Path does not chain with any of the trust anchors], एक समस्या नहीं eather? मुझे अपना नाम दिखाई देता है CNइसलिए मुझे लगता है कि मैंने इसे ठीक से हस्ताक्षरित किया है :)
CularBytes

@RageCompex यह पहले से ही "चेक किए गए हस्ताक्षर कुंजी का उपयोग करें" अनुभाग में उत्तर दिया गया है।
क्रिस्टोफर ओरल

मुझे आज मिनी हार्ट अटैक आया। मैंने इन कमांड लाइनों का उपयोग छिपे हुए कीस्टोर का पता लगाने के लिए किया। दोस्त बहुत - बहुत धन्यवाद! आपने मुझे बचाया ... वास्तव में: डी
अजीत

11

कुछ भी नहीं - Google यह स्पष्ट रूप से कहता है कि एप्लिकेशन को उस पर हस्ताक्षर करने के लिए उपयोग की गई कुंजी द्वारा पहचाना जाता है। नतीजतन यदि आपने चाबियाँ खो दी हैं, तो आपको एक नया एप्लिकेशन बनाने की आवश्यकता है।


1
@sports वे कर आपको चेतावनी देता। सूचना बड़ा लाल चेतावनी संदेश: developer.android.com/tools/publishing/...
क्रिस्टोफर ऑर

2
@ पासपोर्ट किसी भी स्थिति में, आप एक ही डेवलपर खाते पर एक से अधिक ऐप प्रकाशित कर सकते हैं, इसलिए आपको फिर से भुगतान करने की आवश्यकता नहीं है।
क्रिस्टोफर ऑर्ट

7

आज मैंने उसी मुद्दे का सामना किया, दुर्भाग्य से, मैं अपनी कीस्टोर फाइल में दो उपनाम रख रहा था।यहां छवि विवरण दर्ज करें


7

मैं अभी स्पष्ट नीले रंग से बाहर आया था। मुझे नहीं लगता कि मैंने कुछ भी बदला है।

हालाँकि, Build => Clean Projectइसे ठीक किया।


1
हम्म, मैं 1 सप्ताह बिता रहा हूं, हर संभव प्रयास किया। और यह "डब्ल्यूटीएफ" कहने का समय है, लेकिन यह एकमात्र ऐसी चीज है जिसने मदद की। (मैं भी अमान्य कैश की कोशिश की है कि मदद नहीं की ..) धन्यवाद
उपसंहार42

1
एक घंटे के लिए पागल हो जाने के बाद इस मुद्दे को तय किया
बोरिस लेगोविच

इसके लिए धन्यवाद; यह एक वास्तविक जीवन रक्षक है!
इयान म्बे

मुझे नहीं लगता कि यह संबंधित है।
अनंत लूप्स

बहुत बहुत धन्यवाद!। मैंने गलती से अलग कीस्टॉर फ़ाइल और क्रेडेंशियल्स के साथ एक हस्ताक्षरित APK तैयार की है और इसे अपलोड किया है। सही कीस्टोर के साथ एपीके अपलोड करने के बाद भी वही त्रुटि रही। अमान्य कैश, एंड्रॉइड स्टूडियो और पीसी रीस्टार्ट के साथ नई रिलीज़ बनाने के एक घंटे के बाद, यह अंततः इसे ठीक कर देता है।
अरुण

5

यहाँ मुझे उस प्रश्न का उत्तर मिल गया। बहुत लंबे समय तक खोजने के बाद आखिरकार मुझे इसके लिए कुंजी और पासवर्ड क्रैक करना है। मैं अपनी कुंजी और अन्य उपनाम भी भूल जाता हूं, लेकिन सौभाग्य से मुझे पासवर्ड का गुच्छा पता है कि मैंने इसमें क्या डाला था। लेकिन उसके लिए सही संयोजन खोजना मेरे लिए सबसे मुश्किल काम था।

समाधान - इसे डाउनलोड करें - Keytool IUI संस्करण 2.4.1 प्लगइन यहां छवि विवरण दर्ज करें

विंडो अब पॉप हो जाएगी। यह उपनाम नाम दिखाता है। जब आप google app store में एपीके अपलोड कर रहे थे ...

अगर यह मेल खाता है तो आप सही jks फ़ाइल और उपनाम के साथ हैं।

अब भाग्यशाली मैं मैच के लिए पासवर्ड का गुच्छा है .. यहां छवि विवरण दर्ज करें

अब इस स्क्रिन पर जाएं वही jks पाथ डालें .. और पासवर्ड (आपके पास मौजूद पासवर्ड में) "सर्टिफिकेट फाइल" में कोई भी पाथ डालें।

यदि स्क्रीन कोई त्रुटि दिखाती है तो पासवर्ड मेल नहीं खा रहा है .. यदि यह कोई त्रुटि नहीं दिखाता है तो इसका मतलब है कि आप सही jks फ़ाइल के साथ हैं। सही उपनाम और पासवर्ड () अब आप अपनी एपीके को प्ले स्टोर में अपलोड कर सकते हैं :)


आपने निजी कुंजी खो दी है और आप इसे इस तरह से पुनः प्राप्त करने में सक्षम थे? यदि उत्तर हाँ है, तो क्या यह संभव है कि आप लिंक कर सकें कि उपकरण कहाँ से डाउनलोड करें? और मैं ऐप कैसे खोलूं?
LS_

4

यदि आपके पास पिछली एपीके फाइल (बैकअप) है तो उस एपीके से प्रमाण पत्र निकालने के लिए जारसिग्नर का उपयोग करें, फिर उस कुंजी का उपयोग करें या उस प्रमाण पत्र को क्लोन करने के लिए कीटलूल का उपयोग करें, हो सकता है कि इससे मदद मिलेगी ... सहायक लिंक जार्सिग्नर डॉक्स और कीटोल डॉक्स हैं।


5
"..use jarSigner उस apk से प्रमाणपत्र निकालने के लिए" - हमें बताएं कि यह कैसे करना है?
रूबिकन

14
उस निजी कुंजी को पुनर्प्राप्त नहीं किया जाएगा जिसे आपको फिर से एपीके पर हस्ताक्षर करना होगा।
बॉटलियाप

Apk को एक ही निजी कुंजी
om252345

3

मैं केइस्टोर एक्सप्लोरर ( https://keystore-explorer.org/ ) की अत्यधिक अनुशंसा करता हूं, जो आपको Google Play पर अपलोड किए बिना अपने कीस्टोर तक पहुंचने देता है। इस तरह से आप समस्या निवारण कर सकते हैं कि क्या आप अपना पासवर्ड गलत दर्ज कर रहे हैं।


1

नई कुंजी फ़ाइल बनाने के लिए आप नई सुविधा Google play app का उपयोग कर सकते हैं।

मई 2017 के बाद Google play store ने Play store पर एक नई सुविधा जोड़ी है और यह Android डेवलपर्स के लिए अच्छी खबर है। इस सुविधा से, डेवलपर अपने ऐप या Apk को अपडेट कर सकता है, जिसने KeyStore फाइल खो दी है। आपको google play app को play store कंसोल पर सक्षम करने की आवश्यकता है।

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

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


0

मैंने हाल ही में इस मुद्दे का सामना किया था, साइन इन करने के विभिन्न तरीकों को सक्षम करने के बाद जैसे वी 1 या वी 2 को सक्षम करने के लिए, उपनाम नाम बदलकर साइन इन किया गया और अंतिम बार पता चला कि मैं गलत कुंजी स्टोर फ़ाइल का उपयोग कर रहा हूं


0

मेरी [मूर्खतापूर्ण] गलती यह थी कि मैंने ऐप-रिलीज़-एप फ़ाइल के बजाय ऐप-डीबग.पेक फ़ाइल का उपयोग किया। जब आप साइन इन एपीके को बनाते हैं, तो आपको "बिल्ड वेरिएंट" फ्रेम में "रिलीज़" चुनने की आवश्यकता होती है। ऐप-रिलीज़ .apk फ़ाइल को आपके प्रोजेक्ट रूट में "ऐप \ रिलीज़" फ़ोल्डर के तहत स्थित होना चाहिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.