apksigner

apksigner टूल, जो संशोधन 24.0.3 और इसके बाद के वर्शन में उपलब्ध है की मदद से, Android SDK बिल्ड टूल की मदद से APK पर साइन किया जा सकता है. साथ ही, यह पुष्टि की जा सकती है कि Android के सभी वर्शन पर APK के हस्ताक्षर की पुष्टि की जाएगी वह प्लैटफ़ॉर्म जो उस APK पर काम करता है.

यह पृष्ठ से जुड़ी है. साथ ही, यह अलग-अलग कमांड-लाइन विकल्पों के रेफ़रंस के तौर पर काम करती है. टूल में इस्तेमाल किए जा सकते हैं. इसके बारे में पूरी जानकारी पाने के लिए कि apksigner टूल का इस्तेमाल आपके APK पर हस्ताक्षर करने के लिए किया जाता है. अपने ऐप्लिकेशन पर हस्ताक्षर करना देखें.

चेतावनी: अगर आप apksigner का इस्तेमाल करके अपने APK पर हस्ताक्षर करते हैं और APK में आगे कोई बदलाव करने पर, APK का हस्ताक्षर अमान्य हो जाएगा. अगर आपको अलाइन करने के लिए zipalign है, तो APK पर हस्ताक्षर करने से पहले इसका इस्तेमाल करें.

इस्तेमाल

APK पर हस्ताक्षर करना

apksigner टूल का इस्तेमाल करके APK पर हस्ताक्षर करने का सिंटैक्स इस तरह है अनुसरण करता है:

apksigner sign --ks keystore.jks |
  --key key.pk8 --cert cert.x509.pem
  [signer_options] app-name.apk

जब आप apksigner टूल का इस्तेमाल करके किसी APK पर हस्ताक्षर करते हैं, तो आपको हस्ताक्षर करने वाले व्यक्ति की निजी कुंजी और प्रमाणपत्र. आप इसमें यह जानकारी शामिल कर सकते हैं: दो तरीके:

  • --ks विकल्प का इस्तेमाल करके कीस्टोर फ़ाइल तय करें.
  • निजी कुंजी फ़ाइल और प्रमाणपत्र फ़ाइल को अलग-अलग निर्दिष्ट करें --key और --cert विकल्प. कॉन्टेंट बनाने निजी कुंजी वाली फ़ाइल को PKCS #8 प्रारूप का उपयोग करना होगा और प्रमाणपत्र फ़ाइल को X.509 फ़ॉर्मैट का इस्तेमाल करना चाहिए.

आम तौर पर, APK पर हस्ताक्षर करने के लिए सिर्फ़ एक व्यक्ति का इस्तेमाल किया जाता है. अगर आपको एक से ज़्यादा लोगों का इस्तेमाल करके, APK पर हस्ताक्षर करें. इसके लिए, --next-signer विकल्प इस्तेमाल करें सामान्य विकल्पों के सेट को अलग करने के लिए हस्ताक्षर करने वाले हर व्यक्ति पर लागू करें:

apksigner sign [signer_1_options] --next-signer [signer_2_options] app-name.apk

APK के हस्ताक्षर की पुष्टि करना

APK के हस्ताक्षर की पुष्टि होने की पुष्टि करने वाला सिंटैक्स नीचे दिया गया है:

apksigner verify [options] app-name.apk

साइनिंग पासकोड बदलना

साइनिंग सर्टिफ़िकेट लीनिएज या इसके नए क्रम को घुमाने का सिंटैक्स हस्ताक्षर यहां बताए गए हैं:

$ apksigner rotate --in /path/to/existing/lineage \
  --out /path/to/new/file \
  --old-signer --ks old-signer-jks \
  --new-signer --ks new-signer-jks

विकल्प

नीचे दी गई सूचियों में हर उस निर्देश के लिए विकल्पों का सेट शामिल है apksigner टूल काम करता है.

आदेश पर हस्ताक्षर करें

apksigner साइन कमांड में ये विकल्प होते हैं.

सामान्य विकल्प

इन विकल्पों में, हस्ताक्षर करने वाले व्यक्ति पर लागू होने वाली बुनियादी सेटिंग के बारे में बताया गया है:

--out <apk-filename>
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है वह जगह जहां आपको साइन किए गए APK को सेव करना है. अगर यह विकल्प साफ़ तौर पर बताया गया है, तो APK पैकेज को साइन इन किया हुआ है. इसे ओवरराइट कर दिया जाता है इनपुट APK फ़ाइल में डालें.
--min-sdk-version <integer>
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है Android फ़्रेमवर्क का सबसे कम एपीआई लेवल जिसका इस्तेमाल apksigner करता है यह पुष्टि करें कि APK के हस्ताक्षर की पुष्टि की जाएगी. ज़्यादा वैल्यू का इस्तेमाल करने पर टूल का इस्तेमाल करके, मज़बूत सुरक्षा पैरामीटर का इस्तेमाल करें. हालांकि, अब यह Android के सबसे नए वर्शन चला रहे डिवाइस के लिए APK की उपलब्धता. डिफ़ॉल्ट रूप से, apksigner ऐप्लिकेशन की मेनिफ़ेस्ट फ़ाइल से मिली minSdkVersion एट्रिब्यूट की वैल्यू सबमिट करें.
--max-sdk-version <integer>
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है Android फ़्रेमवर्क का सबसे नया एपीआई लेवल जिसका इस्तेमाल apksigner करता है ताकि यह पुष्टि की जा सके कि APK के हस्ताक्षर की पुष्टि की जाएगी. डिफ़ॉल्ट रूप से, यह टूल सबसे ज़्यादा संभावित एपीआई लेवल का इस्तेमाल करता है.
--rotation-min-sdk-version <integer>
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है APK का 'रोटेट किया गया साइनिंग' सुविधा इस्तेमाल करके, सबसे कम एपीआई लेवल कुंजी का उपयोग APK का हस्ताक्षर बनाने के लिए किया जाना चाहिए. कॉन्टेंट बनाने APK की ओरिजनल (बिना घुमाई गई) वाली साइनिंग कुंजी का इस्तेमाल प्लैटफ़ॉर्म के पुराने वर्शन हैं. डिफ़ॉल्ट रूप से, रोटेट की गई साइनिंग कुंजियां, जो Android 13 पर चलने वाले डिवाइसों पर काम करती हैं (एपीआई लेवल 33) या उसके बाद के वर्शन का इस्तेमाल, v3.1 साइनिंग ब्लॉक के साथ किया जाता है.

ध्यान दें: अगर आपके ऐप्लिकेशन पर 'घुमाएं' की मदद से साइन किया गया है, तो पासकोड का इस्तेमाल करने से, जो Android 12L (एपीआई लेवल 32) या इससे पहले के वर्शन पर काम करता है. इसके बाद, आपको साइन इन जारी रखने के लिए, --rotation-min-sdk-version 28 का इस्तेमाल करना होगा Android 9 (एपीआई लेवल 28) के लिए, घुमाए गए साइनिंग पासकोड के साथ अपना ऐप्लिकेशन.

--v1-signing-enabled <true | false>
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है इससे पता चलता है कि apksigner दिए गए APK पैकेज पर हस्ताक्षर करता है या नहीं जिसमें पारंपरिक, JAR आधारित साइनिंग स्कीम का इस्तेमाल किया गया है. डिफ़ॉल्ट रूप से, यह टूल --min-sdk-version और इस हस्ताक्षर को कब लागू करना है, यह तय करने के लिए --max-sdk-version स्कीम.
--v2-signing-enabled <true | false>
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है इससे पता चलता है कि apksigner दिए गए APK पैकेज पर हस्ताक्षर करता है या नहीं APK का इस्तेमाल करके सिग्नेचर स्कीम v2. डिफ़ॉल्ट रूप से, यह टूल इन तय करने के लिए, --min-sdk-version और --max-sdk-version सिग्नेचर स्कीम कब लागू करनी है.
--v3-signing-enabled <true | false>
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है इससे पता चलता है कि apksigner दिए गए APK पैकेज पर हस्ताक्षर करता है या नहीं APK का इस्तेमाल करके सिग्नेचर स्कीम v3. डिफ़ॉल्ट रूप से, यह टूल इन तय करने के लिए, --min-sdk-version और --max-sdk-version सिग्नेचर स्कीम कब लागू करनी है.
--v4-signing-enabled <true | false | only>

इससे यह पता चलता है कि apksigner, दिए गए APK पैकेज पर हस्ताक्षर करता है या नहीं APK का इस्तेमाल करके सिग्नेचर स्कीम v4. यह स्कीम एक अलग फ़ाइल (apk-name.apk.idsig) में हस्ताक्षर बनाता है. अगर true और APK पर हस्ताक्षर नहीं किया गया है, तो v2 या v3 हस्ताक्षर को लागू करें इसे --min-sdk-version और की वैल्यू के आधार पर जनरेट किया जाता है --max-sdk-version. इसके बाद कमांड, .idsig फ़ाइल, साइन किए गए APK के कॉन्टेंट पर आधारित है.

सिर्फ़ v4 को जनरेट करने के लिए only का इस्तेमाल करें APK और किसी भी हस्ताक्षर में बदलाव किए बिना हस्ताक्षर जो शुरू से पहले होती थी. अगर APK इंस्टॉल नहीं करता है, तो only काम नहीं करेगा हस्ताक्षर पहले से ही v2 या v3 हो या हस्ताक्षर में किसी दूसरी कुंजी का इस्तेमाल हुआ हो के लिए दी गई वैल्यू से अलग है.

डिफ़ॉल्ट रूप से, यह टूल इन तय करने के लिए, --min-sdk-version और --max-sdk-version सिग्नेचर स्कीम कब लागू करनी है.

-v, --verbose
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है वर्बोस आउटपुट मोड का इस्तेमाल करें.

हस्ताक्षर करने वाले हर व्यक्ति के लिए विकल्प

नीचे दिए गए विकल्प, हस्ताक्षर करने वाले किसी खास व्यक्ति का कॉन्फ़िगरेशन तय करते हैं. ये अगर ऐप्लिकेशन पर हस्ताक्षर करने के लिए, सिर्फ़ एक व्यक्ति का इस्तेमाल किया जाता है, तो विकल्पों की ज़रूरत नहीं होती है.

--next-signer <signer-options>
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है हस्ताक्षर करने वाले हर व्यक्ति के लिए अलग-अलग सामान्य विकल्प तय करने में इस्तेमाल किया जाता है.
--v1-signer-name <basename>
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है उन फ़ाइलों का आधार नाम, जिनमें फ़ाइल फ़ोल्डर के लिए JAR-आधारित हस्ताक्षर होता है हस्ताक्षर करने वाला मौजूदा व्यक्ति. डिफ़ॉल्ट रूप से, apksigner इसके कुंजी उपनाम का इस्तेमाल करता है हस्ताक्षर करने वाले इस व्यक्ति के लिए, KeyStore या मुख्य फ़ाइल का बेसनाम डालें.

कुंजी और प्रमाणपत्र विकल्प

नीचे दिए गए विकल्पों से, हस्ताक्षर करने वाले व्यक्ति की निजी कुंजी और सर्टिफ़िकेट के बारे में पता चलता है:

--ks <filename>
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है हस्ताक्षर करने वाले व्यक्ति की निजी कुंजी और सर्टिफ़िकेट चेन, दी गई जानकारी में मौजूद होती है Java पर आधारित कीस्टोर फ़ाइल. अगर फ़ाइल नाम को "NONE" पर सेट किया गया है, कुंजी और प्रमाणपत्र वाले KeyStore को फ़ाइल की आवश्यकता नहीं है बताया गया है, जो कुछ PKCS #11 KeyStores पर लागू होता है.
--ks-key-alias <alias>
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है उस उपनाम का नाम जो हस्ताक्षर करने वाले व्यक्ति की निजी कुंजी और प्रमाणपत्र डेटा को कॉपी करने की ज़रूरत नहीं है. अगर KeyStore हस्ताक्षर में कई कुंजियां हैं, तो आपको यह विकल्प बताना होगा.
--ks-pass <input-format>

KeyStore के लिए पासवर्ड, जिसमें हस्ताक्षर करने वाले की निजी कुंजी होती है और प्रमाणपत्र. कीस्टोर खोलने के लिए आपको पासवर्ड देना होगा. कॉन्टेंट बनाने apksigner टूल में ये फ़ॉर्मैट इस्तेमाल किए जा सकते हैं:

  • pass:<password> – इनलाइन पासवर्ड दिया गया बाकी apksigner sign कमांड के साथ.
  • env:<name> – पासवर्ड दिए गए खाते में सेव है एनवायरमेंट वैरिएबल.
  • file:<filename> – पासवर्ड को दी गई फ़ाइल में एकल पंक्ति.
  • stdin – पासवर्ड की जानकारी एक लाइन में दी गई है स्टैंडर्ड इनपुट स्ट्रीम में शामिल हो सकते हैं. यह इसके लिए डिफ़ॉल्ट व्यवहार है --ks-pass.

ध्यान दें: अगर एक ही बार में एक से ज़्यादा पासवर्ड जोड़े गए हैं, तो फ़ाइल के लिए उन्हें अलग-अलग लाइन में इस्तेमाल किया जा सकता है. apksigner टूल पासवर्ड को APK पर हस्ताक्षर करने वाले लोगों से जोड़ता है. ऐसा उस क्रम के हिसाब से किया जाता है जिसमें तो हस्ताक्षर करने वाले लोगों के बारे में बताएं. अगर आपने हस्ताक्षर करने वाले किसी व्यक्ति के लिए दो पासवर्ड दिए हैं, तो apksigner पहले पासवर्ड को कीस्टोर के तौर पर समझता है और दूसरा कुंजी पासवर्ड के रूप में है.

--pass-encoding <charset>
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है इसमें खास कैरेक्टर एन्कोडिंग शामिल होती हैं, जैसे ibm437 या utf-8 ऐसे पासवर्ड हैंडल करें जिनमें बिना ASCII वर्ण हों.

Keytool अक्सर कंसोल के डिफ़ॉल्ट का इस्तेमाल करके पासवर्ड को बदलकर कीस्टोर को एन्क्रिप्ट करता है वर्णसेट. डिफ़ॉल्ट रूप से, apksigner पासवर्ड:

  • यूनिकोड फ़ॉर्म
  • JVM डिफ़ॉल्ट वर्णसेट का उपयोग करके एन्कोड किया गया फ़ॉर्म
  • Java 8 और पुराने वर्शन पर, कंसोल के डिफ़ॉल्ट वर्णसेट का उपयोग करके एन्कोड किया गया फ़ॉर्म
  • Java 9 पर, apksigner कंसोल के वर्णसेट का पता नहीं लगा सकता. आपको --pass-encoding तय करना पड़ सकता है, जब बिना ASCII वाले पासवर्ड का इस्तेमाल किया गया हो. आपको इस विकल्प को उन KeyStores के साथ भी तय करना पड़ सकता है जिनमें कीटूल को किसी दूसरे ओएस पर या अलग स्थान-भाषा में बनाया गया हो.

    --key-pass <input-format>

    हस्ताक्षर करने वाले व्यक्ति की निजी कुंजी का पासवर्ड, जिसकी ज़रूरत तब होती है, जब निजी कुंजी, पासवर्ड से सुरक्षित है. apksigner टूल नीचे दिए गए फ़ॉर्मैट के साथ काम करता है:

    • pass:<password> – पासवर्ड इनलाइन दिया गया है बाकी apksigner sign कमांड के साथ.
    • env:<name> – पासवर्ड दिए गए खाते में सेव है एनवायरमेंट वैरिएबल.
    • file:<filename> – पासवर्ड को दी गई फ़ाइल में एकल पंक्ति.
    • stdin – पासवर्ड की जानकारी एक लाइन में दी गई है तो स्टैंडर्ड इनपुट स्ट्रीम में भी शामिल हो सकते हैं. यह इसके लिए डिफ़ॉल्ट व्यवहार है --key-pass.
    --ks-type <algorithm>
    अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है KeyStore से जुड़ा वह टाइप या एल्गोरिदम जिसमें हस्ताक्षर करने वाले व्यक्ति की निजी कुंजी और प्रमाणपत्र की पुष्टि करें. डिफ़ॉल्ट रूप से, apksigner keystore.type कॉन्सटेंट के तौर पर बताए गए टाइप का इस्तेमाल करता है सुरक्षा प्रॉपर्टी फ़ाइल.
    --ks-provider-name <name>
    अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है हस्ताक्षर करने वाले व्यक्ति के KeyStore का अनुरोध करते समय इस्तेमाल करने के लिए, JCA की सेवा देने वाली कंपनी का नाम लागू करना. डिफ़ॉल्ट रूप से, apksigner सबसे प्राथमिकता वाली कंपनी है.
    --ks-provider-class <class-name>
    अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है अनुरोध करते समय इस्तेमाल करने के लिए, JCA की सेवा देने वाली कंपनी की पूरी तरह क्वालिफ़ाइड क्लास का नाम हस्ताक्षर करने वाले व्यक्ति का KeyStore लागू करना. यह विकल्प, एक विकल्प के तौर पर काम करता है --ks-provider-name के लिए. डिफ़ॉल्ट रूप से, apksigner --ks-provider-name के साथ तय की गई कंपनी का इस्तेमाल करता है का विकल्प शामिल है.
    --ks-provider-arg <value>
    अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है JCA के कंस्ट्रक्टर के लिए, आर्ग्युमेंट के तौर पर पास की जाने वाली स्ट्रिंग वैल्यू सेवा देने वाली कंपनी की कैटगरी; क्लास खुद को --ks-provider-class विकल्प. डिफ़ॉल्ट रूप से, apksigner क्लास के ज़ीरो-आर्गुमेंट कंस्ट्रक्टर का इस्तेमाल करता है.
    --key <filename>
    अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है उस फ़ाइल का नाम जिसमें हस्ताक्षर करने वाले व्यक्ति की निजी कुंजी है. यह फ़ाइल को PKCS #8 DER फ़ॉर्मैट का इस्तेमाल करना होगा. अगर कुंजी पासवर्ड से सुरक्षित की गई है, तो apksigner, स्टैंडर्ड इनपुट का इस्तेमाल करके पासवर्ड डालने के लिए अनुरोध करता है जब तक कि आप --key-pass विकल्प.
    --cert <filename>
    अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है उस फ़ाइल का नाम जिसमें हस्ताक्षर करने वाले व्यक्ति के सर्टिफ़िकेट की चेन है. यह फ़ाइल में X.509 PEM या DER फ़ॉर्मैट का इस्तेमाल किया जाना चाहिए.

    आदेश की पुष्टि करें

    apksigner की पुष्टि करने वाले निर्देश में ये विकल्प होते हैं.

    --print-certs
    अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है APK के साइनिंग सर्टिफ़िकेट के बारे में जानकारी दिखाएं.
    --min-sdk-version <integer>
    अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है Android फ़्रेमवर्क का सबसे कम एपीआई लेवल जिसका इस्तेमाल apksigner करता है यह पुष्टि करें कि APK के हस्ताक्षर की पुष्टि की जाएगी. ज़्यादा वैल्यू का इस्तेमाल करने पर टूल का इस्तेमाल करके, मज़बूत सुरक्षा पैरामीटर का इस्तेमाल करें. हालांकि, अब यह Android के सबसे नए वर्शन चला रहे डिवाइस के लिए APK की उपलब्धता. डिफ़ॉल्ट रूप से, apksigner ऐप्लिकेशन की मेनिफ़ेस्ट फ़ाइल से मिली minSdkVersion एट्रिब्यूट की वैल्यू सबमिट करें.
    --max-sdk-version <integer>
    अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है Android फ़्रेमवर्क का सबसे नया एपीआई लेवल जिसका इस्तेमाल apksigner करता है ताकि यह पुष्टि की जा सके कि APK के हस्ताक्षर की पुष्टि की जाएगी. डिफ़ॉल्ट रूप से, यह टूल सबसे ज़्यादा संभावित एपीआई लेवल का इस्तेमाल करता है.
    -v, --verbose
    अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है वर्बोस आउटपुट मोड का इस्तेमाल करें.
    -Werr
    अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है चेतावनियों को गड़बड़ी के तौर पर देखें.

    उदाहरण

    यहां apksigner का इस्तेमाल करने के उदाहरण दिए गए हैं.

    APK पर हस्ताक्षर करना

    release.jks का इस्तेमाल करके APK पर हस्ताक्षर करें. यह सिर्फ़ एक कुंजी है कीस्टोर:

    $ apksigner sign --ks release.jks app.apk
    

    अलग-अलग फ़ाइलों के तौर पर सेव किए गए सर्टिफ़िकेट और निजी पासकोड का इस्तेमाल करके, APK पर हस्ताक्षर करें:

    $ apksigner sign --key release.pk8 --cert release.x509.pem app.apk
    

    दो कुंजियों का इस्तेमाल करके APK पर हस्ताक्षर करें:

    $ apksigner sign --ks first-release-key.jks --next-signer --ks second-release-key.jks app.apk
    

    घुमाई गई साइनिंग कुंजी और रोटेशन टारगेटिंग SDK वर्शन 28+ के साथ एक APK पर हस्ताक्षर करें:

    $ apksigner sign --ks release.jks --next-signer --ks release2.jks \
      --lineage /path/to/signing/history/lineage app.apk \
      --rotation-min-sdk-version 28
    

    घुमाई गई साइनिंग कुंजी और रोटेशन टारगेटिंग SDK वर्शन 33+ के साथ एक APK पर हस्ताक्षर करें:

    $ apksigner sign --ks release.jks --next-signer --ks release2.jks \
      --lineage /path/to/signing/history/lineage app.apk
    

    APK के हस्ताक्षर की पुष्टि करना

    इस बात की जांच कर लें कि APK के हस्ताक्षरों की पुष्टि इस डिवाइस पर मान्य होने की उम्मीद है या नहीं वे सभी Android प्लैटफ़ॉर्म जिनका यह APK काम करता है:

    $ apksigner verify app.apk
    

    इस बात की जांच कर लें कि APK के हस्ताक्षरों की पुष्टि इस डिवाइस पर मान्य होने की उम्मीद है या नहीं Android 4.0.3 (एपीआई लेवल 15) और उसके बाद के वर्शन:

    $ apksigner verify --min-sdk-version 15 app.apk
    

    साइनिंग पासकोड बदलना

    साइनिंग सर्टिफ़िकेट लीनेज चालू करें, जो 'की रोटेशन' के साथ काम करता हो:

    $ apksigner rotate --out /path/to/new/file --old-signer \
        --ks release.jks --new-signer --ks release2.jks

    अपनी साइनिंग कुंजियों को फिर से घुमाएं:

    $ apksigner rotate --in /path/to/existing/lineage \
      --out /path/to/new/file --old-signer --ks release2.jks \
      --new-signer --ks release3.jks