APK फ़ाइलों पर हस्ताक्षर करने की आवश्यकता क्यों है?
प्रत्येक Android ऐप को इंस्टॉल करने से पहले डिजिटल रूप से हस्ताक्षरित होना चाहिए। हस्ताक्षर कई उद्देश्यों को पूरा करता है:
- ऐप डेवलपर की पहचान सत्यापित करता है
- यह सुनिश्चित करता है कि APK के साथ छेड़छाड़ नहीं की गई है
- Android को ऐप अपडेट को मूल से मिलान करने की अनुमति देता है
- सभी Android डिवाइस पर इंस्टॉल करने के लिए आवश्यक है
डेस्कटॉप टूल आवश्यक
APK साइनिंग के लिए कमांड-लाइन टूल्स (जेडीके/Android SDK) की आवश्यकता होती है। यह वेब ब्राउज़र में नहीं किया जा सकता. अपने कंप्यूटर पर APK पर हस्ताक्षर करने के लिए नीचे दी गई मार्गदर्शिका का पालन करें।
विधि 1: apksigner के साथ हस्ताक्षर करें (अनुशंसित)
apksigner Google का आधिकारिक APK साइनिंग टूल है, जो Android SDK बिल्ड टूल्स में शामिल है।
चरण 1: एक कीस्टोर उत्पन्न करें
keytool -genkey -v -keystore my-release-key.jks \
-keyalg RSA -keysize 2048 -validity 10000 \
-alias my-key-alias
चरण 2: APK पर हस्ताक्षर करें
apksigner sign --ks my-release-key.jks \
--ks-key-alias my-key-alias \
--out signed-app.apk unsigned-app.apk
चरण 3: हस्ताक्षर सत्यापित करें
apksigner verify --verbose signed-app.apk
विधि 2: jarsigner के साथ हस्ताक्षर करें (विरासत)
# Sign
jarsigner -verbose -sigalg SHA256withRSA \
-digestalg SHA-256 \
-keystore my-release-key.jks \
app-unsigned.apk my-key-alias
# Verify
jarsigner -verify -verbose app-signed.apk
चरण 4: ज़िपलाइन (महत्वपूर्ण!)
हस्ताक्षर करने के बाद, APK को ज़िपलाइन के साथ अनुकूलित करें:
zipalign -v 4 signed-app.apk aligned-app.apk
डिबग साइनिंग (परीक्षण के लिए)
परीक्षण उद्देश्यों के लिए, आप डिफ़ॉल्ट Android डिबग कीस्टोर का उपयोग कर सकते हैं:
# Location of debug keystore:
# Linux/Mac: ~/.android/debug.keystore
# Windows: C:\Users\{USERNAME}\.android\debug.keystore
# Sign with debug key
apksigner sign --ks ~/.android/debug.keystore \
--ks-key-alias androiddebugkey \
--ks-pass pass:android \
app.apk
हस्ताक्षर उपकरण तुलना
| मापदंड | apksigner | jarsigner |
|---|---|---|
| V1 हस्ताक्षर | ||
| V2 हस्ताक्षर | ||
| V3 हस्ताक्षर | ||
| अनुशंसित | परंपरा |
APK हस्ताक्षरकर्ता - अक्सर पूछे जाने वाले प्रश्न
APK साइनिंग, कीस्टोर्स और Android कोड साइनिंग के बारे में सामान्य प्रश्न
Android 11-15 पर एलाइनमेंट ऑर्डर (apksigner से पहले जिपलाइन) क्यों मायने रखता है
संशोधित या मर्ज किए गए APK पर हस्ताक्षर करते समय डेवलपर्स और मॉडर्स द्वारा की जाने वाली सबसे आम गलतियों में से एक पैकेज पर हस्ताक्षर करते समय zipalign बाद चलाना है - या Google के Android SDK apksigner के बजाय जावा की विरासत jarsigner उपयोगिता का उपयोग करना है। क्योंकि APK सिग्नेचर स्कीम v2 और v3 ज़िप संग्रह के संपूर्ण बाइनरी लेआउट पर एक क्रिप्टोग्राफ़िक हैश की गणना करते हैं, हस्ताक्षर करने के तुरंत बाद zipalign के साथ बाइट ऑफसेट को संशोधित करने से v2/v3 हस्ताक्षर ब्लॉक अमान्य हो जाता है।
Android 11 (एपीआई स्तर 30) से शुरू होकर और Android 14 और 15 पर सख्ती से लागू होने पर, पैकेजमैनेजर को आधुनिक SDK स्तरों को लक्षित करने वाले किसी भी APK के लिए दो गैर-परक्राम्य शर्तों की आवश्यकता होती है:
- असम्पीडित 4-बाइट संरेखित resources.arsc: संकलित संसाधन तालिका (resources.arsc) को असंपीड़ित (STORED) संग्रहीत किया जाना चाहिए और 4-बाइट सीमा पर संरेखित किया जाना चाहिए ताकि Android इसे रैम में कॉपी किए बिना सीधे मेमोरी-मैप (mmap) कर सके। हमेशा zipalign -p -f -v 4 input.apk aligned.apk पहले हस्ताक्षर निष्पादित करें।
- अनिवार्य v2+ हस्ताक्षर ब्लॉक: jarsigner (जो केवल v1 META-INF/ हस्ताक्षर लिखता है) के साथ एपीआई 30+ को लक्षित करने वाले APK पर हस्ताक्षर करने से Android 11-15 INSTALL_PARSE_FAILED_NO_CERTIFICATES के साथ इंस्टॉल को अस्वीकार कर देगा। अपने कीस्टोर के लिए सटीक apksigner --v2-signing-enabled=true कमांड बनाने के लिए ऊपर दिए गए इंटरैक्टिव कमांड जनरेटर का उपयोग करें, या हमारे APK हस्ताक्षर सत्यापनकर्ता में अपने हस्ताक्षरित आउटपुट को सत्यापित करें।