एंड्रॉइड स्टूडियो में हस्ताक्षर किए गए एपीके को बनाते समय हस्ताक्षर संस्करणों - वी 1 (जार सिग्नेचर) और वी 2 (फुल एपीके सिग्नेचर) के बीच अंतर?


234

Android स्टूडियो 2.3 में उपयोग करने के लिए कृपया कम से कम एक हस्ताक्षर संस्करण का चयन करें

अब एंड्रॉइड स्टूडियो में एक हस्ताक्षरित एपीके जनरेट करते समय, यह दो विकल्प दिखा रहा है (चेकबॉक्स) अर्थात् 1. V1 (Jar Signature)और 2. हस्ताक्षरित एपीके जनरेटिंग प्रक्रिया के अंतिम चरण में हस्ताक्षर संस्करणों केV2 (Full APK Signature) रूप में।

** हस्ताक्षर संस्करण ** विकल्प

तो, नए Android स्टूडियो अपडेट में V1 (जार सिग्नेचर) और V2 (फुल एपीके सिग्नेचर) में क्या अंतर है ?

और जो मुझे प्ले स्टोर रिलीज़ के लिए एपीके साइन करने के लिए (या दोनों) का उपयोग करना चाहिए?

जब मैं दूसरे विकल्प का उपयोग कर रहा हूं तो एपीके इंस्टॉल करते समय , मुझे त्रुटि हो रही है इंस्टॉल करें पार्स फेल नहीं प्रमाण पत्र

जवाबों:


219

यह एंड्रॉइड 7.0 में पेश किया गया एक नया हस्ताक्षर तंत्र है, जिसमें एपीके हस्ताक्षर को अधिक सुरक्षित बनाने के लिए डिज़ाइन की गई अतिरिक्त विशेषताएं हैं।

यह अनिवार्य नहीं है। यदि संभव हो तो आपको उन चेकबॉक्सों में से प्रत्येक को चेक करना चाहिए, लेकिन यदि नया वी 2 हस्ताक्षर तंत्र आपको समस्याएं देता है, तो आप इसे छोड़ सकते हैं।

यदि आप समस्याओं का सामना करते हैं तो आप बस V2 को अनियंत्रित छोड़ सकते हैं, लेकिन यदि संभव हो तो इसकी जांच होनी चाहिए।


आपको अपने प्रश्न को फिर से शब्द करना चाहिए, हालांकि ऐसा लगता है कि आपने उस दस्तावेज़ को भी नहीं पढ़ा है जो जुड़ा हुआ था ... यह जानना उपयोगी है कि आप उस चेकमार्क को अनियंत्रित छोड़ सकते हैं। शायद यदि आप "त्रुटि संदेश और आपके द्वारा सामना की गई समस्या) को जोड़ते हैं, तो यह प्रश्न भविष्य के लिए अधिक मूल्यवान हो जाएगा
Booger

मैंने V1 और V2 का उपयोग करके हस्ताक्षरित एप्लिकेशन द्वारा ऐप अपलोड किया है। उसके बाद मैं गूगल प्ले से एप्लिकेशन डाउनलोड करता हूं और एंड्रॉइड स्टूडियो से उसी संस्करण को चलाता हूं, यह मुझे "इंस्टॉलेशन विफल हो गया है क्योंकि डिवाइस में एक ही पैकेज पर एक अलग हस्ताक्षर के साथ एक एप्लिकेशन है।" .. "क्या आप मुझे सुझाव दे सकते हैं कि क्या है। क्या मुझे बिल्ड.ग्रेड को अपडेट करने की आवश्यकता है?
उस्मान अफजल

@UsmanAfzal, यह अपेक्षित व्यवहार है क्योंकि आपने रिलीज़ के साथ ऐप को प्लेस्टोर पर साइन किया था, और अब आप डिबग के साथ इसे एंड्रॉइड स्टूडियो के माध्यम से डिबग या रन करना चाहते हैं। ध्यान दें कि रिलीज और डिबग अलग हस्ताक्षर हैं
परम धर्मिका

44

क्या मुझे प्ले स्टोर रिलीज़ के लिए एपीके साइन करने के लिए (या दोनों) का उपयोग करना चाहिए? एक उत्तर हां है

Https://source.android.com/security/apksigning/v2.html#verification के अनुसार :

एंड्रॉइड 7.0 में, एपीके को एपीके सिग्नेचर स्कीम v2 (v2 स्कीम) या JAR साइनिंग (v1 स्कीम) के अनुसार सत्यापित किया जा सकता है। पुराने प्लेटफॉर्म v2 हस्ताक्षरों की उपेक्षा करते हैं और केवल v1 हस्ताक्षरों की पुष्टि करते हैं।

मैंने V2 (पूर्ण Apk हस्ताक्षर) विकल्प की जाँच के साथ निर्माण करने की कोशिश की । फिर जब मैंने 7.0 डिवाइस के नीचे रिलीज़ बिल्ड स्थापित करने का प्रयास किया और मैं डिवाइस में बिल्ड स्थापित करने में असमर्थ हूं।

उसके बाद मैंने दोनों वर्जन चेकबॉक्स को चेक करके और बिल्ड बिल्ड जेनरेट करने की कोशिश की। फिर बिल्ड स्थापित करने में सक्षम।


24

यहां लिखा है कि "डिफ़ॉल्ट रूप से, एंड्रॉइड स्टूडियो 2.2 और ग्रैडल 2.2 के लिए एंड्रॉइड प्लगिन एपीके सिग्नेचर स्कीम v2 और पारंपरिक हस्ताक्षर योजना का उपयोग करके अपने ऐप पर हस्ताक्षर करते हैं, जो कि JAR हस्ताक्षर का उपयोग करता है।"

जैसा कि ऐसा लगता है कि ये नए चेकबॉक्स एंड्रॉइड 2.3 के साथ दिखाई दिए थे, मैं समझता हूं कि एंड्रॉइड स्टूडियो के मेरे पिछले संस्करणों (कम से कम 2.2) ने दोनों हस्ताक्षर के साथ साइन किया था। इसलिए, जैसा कि मैंने पहले किया था, जारी रखने के लिए, मुझे लगता है कि दोनों चेकबॉक्स की जांच करना बेहतर है।

EDIT मार्च 31, 2017: दोनों हस्ताक्षर के साथ कई एप्लिकेशन सबमिट किए गए => कोई समस्या नहीं :)


7

मुझे लगता है कि यह एक अच्छे उत्तर का प्रतिनिधित्व करता है।

एपीके हस्ताक्षर योजना v2 सत्यापन

  1. पता लगाएँ APK Signing Blockऔर सत्यापित करें:
    1. दो आकार क्षेत्रों में APK Signing Blockसमान मूल्य होते हैं।
    2. ZIP Central Directoryतुरंत ZIP End of Central Directoryरिकॉर्ड द्वारा पीछा किया जाता है ।
    3. ZIP End of Central Directory अधिक डेटा द्वारा अनुसरण नहीं किया जाता है।
  2. पहले APK Signature Scheme v2 Blockअंदर का पता लगाएँ APK Signing Block। यदि v2 ब्लॉक मौजूद है, तो चरण 3 पर आगे बढ़ें। अन्यथा, v1 स्कीम का उपयोग करके एपीके की पुष्टि करें।
  3. प्रत्येक हस्ताक्षरकर्ता के लिए APK Signature Scheme v2 Block:
    1. हस्ताक्षर से सबसे मजबूत समर्थित हस्ताक्षर एल्गोरिदम आईडी चुनें। प्रत्येक आदेश / प्लेटफ़ॉर्म संस्करण के लिए ताकत का आदेश देना आवश्यक है।
    2. सार्वजनिक कुंजी का उपयोग करके हस्ताक्षरित डेटा के विरुद्ध हस्ताक्षर से संबंधित हस्ताक्षर को सत्यापित करें। (अब हस्ताक्षरित डेटा को पार्स करना सुरक्षित है।)
    3. सत्यापित करें कि डिजीट और हस्ताक्षर में हस्ताक्षरित एल्गोरिथ्म आईडी की क्रमबद्ध सूची समान है। (यह हस्ताक्षर स्ट्रिपिंग / जोड़ को रोकने के लिए है।)
    4. एपीके एल्गोरिथ्म द्वारा उपयोग किए जाने वाले डाइजेस्ट एल्गोरिथ्म के रूप में एक ही डाइजेस्ट एल्गोरिथ्म का उपयोग करके एपीके सामग्री के पाचन की गणना करें।
    5. सत्यापित करें कि पचा हुआ पाचन पाचन से संबंधित पाचन के समान है।
    6. सत्यापित करें कि SubjectPublicKeyInfoप्रमाणपत्र का पहला प्रमाण पत्र सार्वजनिक कुंजी के समान है।
  4. सत्यापन सफल होता है अगर कम से कम एक हस्ताक्षरकर्ता पाया गया था और चरण 3 प्रत्येक पाया हस्ताक्षरकर्ता के लिए सफल रहा।

नोट: एपीके को v1 स्कीम का उपयोग करके सत्यापित नहीं किया जाना चाहिए यदि चरण 3 या 4 में विफलता होती है।

JAR- हस्ताक्षरित APK सत्यापन (v1 योजना)

JAR- हस्ताक्षरित एपीके एक मानक हस्ताक्षरित JAR है, जिसमें बिल्कुल सूचीबद्ध META-INF/MANIFEST.MFप्रविष्टियाँ होनी चाहिए और जहाँ सभी प्रविष्टियाँ हस्ताक्षरकर्ताओं के एक ही समूह द्वारा हस्ताक्षरित होनी चाहिए। इसकी अखंडता निम्नानुसार सत्यापित है:

  1. प्रत्येक हस्ताक्षरकर्ता को एक META-INF/<signer>.SFऔर META-INF/<signer>.(RSA|DSA|EC)JAR प्रविष्टि द्वारा दर्शाया गया है ।
  2. <signer>.(RSA|DSA|EC)एक है PKCS #7 CMS ContentInfoSignedData साथ संरचना जिनके हस्ताक्षर से अधिक सत्यापित किया गया है <signer>.SFफ़ाइल।
  3. <signer>.SFफ़ाइल में META-INF/MANIFEST.MFऔर उसके प्रत्येक अनुभाग के डिजेस्ट की एक पूरी-फ़ाइल डाइजेस्ट होती है META-INF/MANIFEST.MF। की पूरी-पूरी फ़ाइल डाइजेस्ट MANIFEST.MFहोती है। यदि वह विफल हो जाता है, तो प्रत्येक MANIFEST.MFअनुभाग का पाचन इसके बजाय सत्यापित होता है।
  4. META-INF/MANIFEST.MFप्रत्येक अखंडता-संरक्षित JAR प्रविष्टि के लिए, एक समान रूप से नामित अनुभाग जिसमें प्रविष्टि की असम्पीडित सामग्री का पाचन होता है। ये सभी डाइजेस्ट सत्यापित हैं।
  5. एपीके सत्यापन में विफल रहता है अगर एपीके में जेएआर प्रविष्टियां होती हैं जो MANIFEST.MFजेएआर हस्ताक्षर में सूचीबद्ध नहीं हैं और नहीं हैं। सुरक्षा श्रृंखला इस प्रकार है <signer>.(RSA|DSA|EC)<signer>.SFMANIFEST.MF→ प्रत्येक अखंडता-संरक्षित JAR प्रविष्टि की सामग्री।

जहां यह कहता है "नोट: एपीके को v1 स्कीम का उपयोग करके सत्यापित नहीं किया जाना चाहिए यदि स्कीम 3 या 4 में विफलता होती है", स्कीम 2 या स्कीम 1 में चरण 3 या 4? यह भी कि यदि v2 में चरण 3 या 4 में कोई विफलता होती है और फिर यह कहते हुए कि इसे v1 योजना का उपयोग करके सत्यापित नहीं किया जा सकता है, तो इसे v1 या v2 में सत्यापित नहीं किया जाएगा यह कैसे सत्यापित किया जाएगा?
isJulian00

7

इस लिंक के अनुसार: हस्ताक्षर सहायता

एपीके हस्ताक्षर योजना v2 प्रदान करता है:

  1. तेज़ ऐप इंस्टॉल समय
  2. एपीके फ़ाइलों में अनधिकृत परिवर्तनों के खिलाफ अधिक सुरक्षा।

एंड्रॉइड 7.0 एपीके सिग्नेचर स्कीम v2 पेश करता है, एक नई ऐप-साइनिंग स्कीम जो एपीके फाइलों में अनधिकृत परिवर्तनों के खिलाफ तेजी से ऐप इंस्टॉल करने और अधिक सुरक्षा प्रदान करती है। डिफ़ॉल्ट रूप से, एंड्रॉइड स्टूडियो 2.2 और ग्रैडल 2.2 के लिए एंड्रॉइड प्लगिन एपीके सिग्नेचर स्कीम v2 और पारंपरिक हस्ताक्षर योजना दोनों का उपयोग करके अपने ऐप पर हस्ताक्षर करते हैं , जो कि JAR हस्ताक्षर का उपयोग करता है।

एपीके सिग्नेचर स्कीम v2 का उपयोग करने की सिफारिश की गई है लेकिन यह अनिवार्य नहीं है

हालाँकि हम आपके ऐप पर एपीके सिग्नेचर स्कीम v2 लगाने की सलाह देते हैं, यह नई स्कीम अनिवार्य नहीं है। यदि एपीके सिग्नेचर स्कीम v2 का उपयोग करते समय आपका ऐप ठीक से नहीं बनता है, तो आप नई स्कीम को अक्षम कर सकते हैं।


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