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 साइनिंग ब्लॉक के साथ किया जाता है.
--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- अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है वर्बोस आउटपुट मोड का इस्तेमाल करें.
ध्यान दें: अगर आपके ऐप्लिकेशन पर 'घुमाएं' की मदद से साइन किया गया है, तो
पासकोड का इस्तेमाल करने से, जो Android 12L (एपीआई लेवल 32) या इससे पहले के वर्शन पर काम करता है. इसके बाद, आपको
साइन इन जारी रखने के लिए, --rotation-min-sdk-version 28 का इस्तेमाल करना होगा
Android 9 (एपीआई लेवल 28) के लिए, घुमाए गए साइनिंग पासकोड के साथ अपना ऐप्लिकेशन.
हस्ताक्षर करने वाले हर व्यक्ति के लिए विकल्प
नीचे दिए गए विकल्प, हस्ताक्षर करने वाले किसी खास व्यक्ति का कॉन्फ़िगरेशन तय करते हैं. ये अगर ऐप्लिकेशन पर हस्ताक्षर करने के लिए, सिर्फ़ एक व्यक्ति का इस्तेमाल किया जाता है, तो विकल्पों की ज़रूरत नहीं होती है.
--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 से जुड़ा वह टाइप या एल्गोरिदम जिसमें
हस्ताक्षर करने वाले व्यक्ति की निजी कुंजी और प्रमाणपत्र की पुष्टि करें. डिफ़ॉल्ट रूप से,
apksignerkeystore.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