Android सीपीयू आर्किटेक्चर (ABI) को समझना: क्यों arm64-v8a, armeabi-v7a, और एक्स86 मायने रखते हैं

Diagram showing one app bundle splitting into arm64-v8a, armeabi-v7a, and x86 architecture-specific APKs

यदि आपने कभी स्प्लिट APK फ़ाइलों का एक सेट मर्ज किया है और अपने फ़ोन को "ऐप इंस्टॉल नहीं है" या इससे भी बदतर देखा है, तो इसे ठीक से इंस्टॉल होते हुए देखा है और आइकन पर टैप करते ही तुरंत क्रैश हो जाता है, इस बात की अच्छी संभावना है कि वास्तविक समस्या का दूषित डाउनलोड से कोई लेना-देना नहीं है। यह लगभग निश्चित रूप से आर्किटेक्चर के बारे में था: आपका फोन जिस सीपीयू पर चलता है और जिस सीपीयू के लिए ऐप का मूल कोड संकलित किया गया था, उसके बीच एक बेमेल। अधिकांश Android उपयोगकर्ताओं को इसके बारे में कभी नहीं सोचना पड़ता है, ठीक उस क्षण तक जब तक यह चुपचाप कुछ तोड़ नहीं देता है, और फिर यह तेजी से प्रासंगिक हो जाता है। यहां बताया गया है कि APK के लिए सीपीयू आर्किटेक्चर का क्या मतलब है, प्ले स्टोर पर एक ही ऐप गुप्त रूप से खुद के कई अलग-अलग बिल्ड के रूप में क्यों शिप होता है, और कुछ भी इंस्टॉल करने से पहले संगतता की जांच कैसे करें।

ABI क्या है

ABI का मतलब एप्लीकेशन बाइनरी इंटरफ़ेस है। व्यावहारिक रूप से, यह निर्देश सेट है जिसे एक चिप समझती है - कच्चे मशीन कोड प्रारूप को एक प्रोसेसर सीधे निष्पादित कर सकता है। अधिकांश Android ऐप, जावा या कोटलिन में लिखे गए हिस्से, Android रनटाइम (एआरटी) के अंदर चलने वाले बाइटकोड में संकलित हो जाते हैं, और एआरटी को विशेष रूप से परवाह नहीं होती है कि यह किस चिप पर बैठा है। वह परत डिज़ाइन द्वारा वास्तुकला-अज्ञेयवादी है, जो इस बात का एक बड़ा हिस्सा है कि Android ऐप्स आमतौर पर हार्डवेयर की इतनी विस्तृत श्रृंखला में "बस काम" क्यों करते हैं।

मूल कोड एक अलग कहानी है. बहुत सारे ऐप्स, विशेष रूप से गेम, कैमरा ऐप, मशीन-लर्निंग टूल और भारी ऑडियो या वीडियो प्रोसेसिंग करने वाली कोई भी चीज़, Android एनडीके के माध्यम से सी या सी ++ में लिखी गई मूल लाइब्रेरी भेजती है। उन पुस्तकालयों को एक विशिष्ट निर्देश सेट के लिए मशीन कोड में समय से पहले संकलित किया जाता है, और एक निर्देश सेट के लिए बनाई गई चिप आम तौर पर एक अलग निर्देश सेट के लिए लिखे गए मशीन कोड को निष्पादित नहीं कर सकती है। यही संपूर्ण कारण है कि ABI समझने लायक चीज़ के रूप में मौजूद है: जिस क्षण किसी ऐप में एक भी मूल .so लाइब्रेरी शामिल होती है, तो इसकी अनुकूलता उन आर्किटेक्चर से बंध जाती है जिसके लिए लाइब्रेरी बनाई गई थी।

आप जिन आर्किटेक्चर में भाग लेंगे

इस स्थान में अधिक विविधता हुआ करती थी (सादा armeabi, या MIPS याद रखें?), लेकिन 2026 तक यह क्षेत्र चार ABI तक सीमित हो गया है जो जानने लायक हैं:

ए.बी.आईबिट चौड़ाईविशिष्ट उपकरणटिप्पणियाँ
arm64-v8a64-बिट एआरएम2019 के बाद से लगभग हर फोन बिकानए ऐप्स के लिए डिफ़ॉल्ट लक्ष्य; Google को कई वर्षों से नए Play Store सबमिशन के लिए 64-बिट समर्थन की आवश्यकता है।
armeabi-v7a32-बिट एआरएमपुराने या बजट डिवाइस, कुछ कम कीमत वाले फोन अभी भी उभरते बाजारों में बेचे जाते हैंबैकवर्ड संगतता के लिए अभी भी कई ऐप्स द्वारा शिप किया जाता है, भले ही अधिकांश सक्रिय डिवाइसों को अब इसकी आवश्यकता नहीं है।
x8632-बिट इंटेलपुराने इंटेल-आधारित टैबलेट, लीगेसी एमुलेटरअधिकतर अप्रचलित; आज आपको वास्तविक 32-बिट x86 फ़ोन शायद ही कभी मिले।
x86_6464-बिट इंटेलकुछ क्रोमबुक, डेस्कटॉप Android एमुलेटर, कुछ x86 टैबलेटयदि आप x86-आधारित Android स्टूडियो AVD या कुछ BlueStacks बिल्ड जैसे एमुलेटर में ऐप्स का परीक्षण करते हैं तो यह महत्वपूर्ण है।

यदि आपके पास पिछले पांच या छह वर्षों में कभी भी खरीदा गया फोन है, तो यह लगभग निश्चित रूप से arm64-v8a है। याद रखने योग्य अपवाद एमुलेटर और क्रोमबुक हैं, जो अक्सर x86_64 पर चलते हैं, क्योंकि यह अंतर्निहित लैपटॉप या डेस्कटॉप सीपीयू से मेल खाता है।

आखिर ऐप्स एकाधिक बिल्ड की शिपिंग में परेशानी क्यों लाते हैं?

एक स्पष्ट प्रश्न यह है कि डेवलपर्स प्रत्येक आर्किटेक्चर की मूल लाइब्रेरी को एक ही APK में क्यों नहीं भर देते हैं और उससे काम क्यों नहीं चलाते हैं। कुछ ऐप्स बिल्कुल ऐसा ही करते हैं, और इसे यूनिवर्सल या "फ़ैट" APK कहा जाता है। नकारात्मक पक्ष आकार है. Arm64-v8a, Armeabi-v7a, x86, और x86_64 के लिए मूल पुस्तकालयों के साथ एक गेम जो सभी को एक साथ बंडल किया गया है, आपके डिवाइस के लिए आवश्यक केवल एक आर्किटेक्चर वाले बिल्ड की तुलना में आकार में आसानी से दोगुना या तिगुना हो सकता है। इसे लाखों इंस्टॉल में गुणा करें और आप उस कोड के लिए बर्बाद बैंडविड्थ और स्टोरेज की वास्तव में महत्वपूर्ण मात्रा देख रहे हैं जो उस डिवाइस पर कभी नहीं चलेगा।

उस बर्बादी से बचने के लिए, Google Play और Android ऐप बंडल प्रारूप ने एक ऐप को एक छोटे बेस APK और कॉन्फ़िगरेशन APK की एक श्रृंखला में विभाजित किया है, जिनमें से एक आर्किटेक्चर के लिए समर्पित है। जब आपका फ़ोन ऐप के लिए अनुरोध करता है, तो Play Store बेस APK को केवल आर्किटेक्चर स्प्लिट के साथ वितरित करता है जो आपके चिप से मेल खाता है, साथ ही स्क्रीन-घनत्व और भाषा विभाजन से मेल खाता है। आप एक ऐसे इंस्टॉल के साथ समाप्त होते हैं जो एक एकल ऐप की तरह व्यवहार करता है लेकिन पर्दे के पीछे कई उद्देश्य-निर्मित टुकड़ों से इकट्ठा किया जाता है।

स्प्लिट APK और ऐप बंडल इसका उपयोग कैसे करते हैं

यदि आपने कभी .apks या .xapk पैकेज खोला है और base.apk के बगल में split_config.arm64_v8a.apk, split_config.armeabi_v7a.apk, split_config.xxhdpi.apk, और split_config.en.apk जैसे फ़ाइल नाम देखे हैं, तो वास्तव में यह सिस्टम क्रियाशील है, प्ले स्टोर द्वारा चुपचाप वितरित किए जाने के बजाय फ़ाइलों के एक सेट के रूप में निर्यात किया जाता है। घनत्व और भाषा विभाजन आमतौर पर अंधाधुंध रूप से स्थापित करना सुरक्षित होता है क्योंकि एक फ़ोन उन संसाधनों को अनदेखा कर देगा जिनकी उसे आवश्यकता नहीं है। आर्किटेक्चर विभाजन अलग है: गलत इंस्टॉल करें, या मेल खाने वाला इंस्टॉल करने में विफल रहें, और आप वास्तविक परेशानी में पड़ जाएंगे।

जब आप एक स्प्लिट पैकेज को वापस एक इंस्टॉल करने योग्य APK में मर्ज करने के लिए एक कनवर्टर का उपयोग करते हैं, तो मर्ज प्रक्रिया में यह चुनना होता है कि कौन सा आर्किटेक्चर स्प्लिट को मोड़ना है। एक अच्छा कनवर्टर प्रत्येक आर्किटेक्चर को विभाजित रखता है जो वास्तव में उपयोगी है, या आपको केवल एक को चुपचाप रखने और यह उम्मीद करने के बजाय कि यह आपके डिवाइस से मेल खाता है, चुनने की सुविधा देता है।

क्या होता है जब वास्तुकला मेल नहीं खाती

अलग-अलग जानने लायक दो अलग-अलग विफलता मोड हैं, क्योंकि वे एक नियमित उपयोगकर्ता के लिए अलग दिखते और महसूस करते हैं।

पहला पूर्णतः इंस्टॉल विफलता है. यदि कोई ऐप लगभग पूरी तरह से मूल कोड के आसपास बिना किसी सार्थक फ़ॉलबैक के बनाया गया है, तो Android का पैकेज मैनेजर इसे इंस्टॉल करने से इंकार कर देगा, आमतौर पर INSTALL_FAILED_NO_MATCHING_ABIS जैसी त्रुटि सामने आएगी। आपको कभी भी ऐप खोलने का मौका नहीं मिलेगा; इंस्टॉलर आपको दरवाजे पर रोक देता है।

दूसरा, अधिक निराशाजनक परिणाम एक मौन आंशिक सफलता है। यदि किसी ऐप में जावा या कोटलिन एंट्री पॉइंट है जो अपने आप ठीक से लोड होता है, लेकिन फिर एक मूल लाइब्रेरी में कॉल करने का प्रयास करता है जो आपके आर्किटेक्चर के लिए मौजूद नहीं है, तो इंस्टॉल सामान्य रूप से पूरा हो जाता है। जब तक आप आइकन पर टैप नहीं करते, तब तक सब कुछ ठीक दिखता है, जिस बिंदु पर ऐप लगभग तुरंत क्रैश हो जाता है, अक्सर लॉग में UnsatisfiedLinkError दब जाता है। यह क्लासिक कहानी है "मैंने इसे परिवर्तित किया, इसे इंस्टॉल किया, फिर यह तुरंत बंद हो गया" कहानी, और यह लगभग हमेशा एक दूषित फ़ाइल के बजाय एक आर्किटेक्चर समस्या है।

Diagram comparing a matching arm64 APK that installs and runs successfully against an x86-only APK that fails to install on an arm64 phone with error INSTALL_FAILED_NO_MATCHING_ABIS

अपने फ़ोन का आर्किटेक्चर कैसे जांचें

अधिकांश लोगों के लिए यह सरल है: यदि आपका फ़ोन 2019 या उसके बाद का है, तो Arm64-v8a मान लें और आगे बढ़ें। यदि आप निश्चित होना चाहते हैं, या आप किसी पुराने या असामान्य उपकरण के साथ काम कर रहे हैं, तो कुछ व्यावहारिक विकल्प:

कैसे जांचें कि APK किस आर्किटेक्चर का समर्थन करता है

Play Store के बाहर से किसी फ़ाइल को इंस्टॉल करने से पहले, अनुमान लगाने के बजाय यह पुष्टि करना उचित है कि उसके अंदर क्या है। APK की मूल लाइब्रेरी lib/ निर्देशिका के अंदर उनके आर्किटेक्चर के नाम पर फ़ोल्डर्स में रहती हैं, जैसे lib/arm64-v8a/ या lib/armeabi-v7a/। कोई भी उपकरण जो APK की आंतरिक संरचना का निरीक्षण कर सकता है वह आपको बता सकता है कि इनमें से कौन सा फ़ोल्डर मौजूद है, जो आपको बताता है कि फ़ाइल किन उपकरणों पर चलेगी।

इंस्टॉल करने से पहले जांच लें

हमारा APK जानकारी उपकरण एक APK के आंतरिक lib/ फ़ोल्डर को पढ़ता है और प्रत्येक आर्किटेक्चर को सूचीबद्ध करता है जिसके लिए इसे बनाया गया था, ताकि आप कुछ भी साइडलोड करने से पहले संगतता की पुष्टि कर सकें। जब आप हमारे XAPKS से APK कनवर्टर के साथ एक स्प्लिट पैकेज को कनवर्ट करते हैं, तो हम प्रत्येक रूपांतरण के बाद इसे स्वचालित रूप से सतह पर लाते हैं, मर्ज की गई फ़ाइल में पाए गए आर्किटेक्चर को सूचीबद्ध करते हैं और जब बिल्ड में एक स्लाइस की कमी होती है, जिसकी सामान्य उपकरणों को आवश्यकता होती है, तो उसे चिह्नित करते हैं।

यूनिवर्सल APK बनाम सिंगल-ABI APK: आपको किसका उपयोग करना चाहिए?

मापदंडयूनिवर्सल/फैट APKसिंगल-ABI APK
फ़ाइल का साइज़बड़ा, कभी-कभी 2-4xछोटा, इसमें केवल वही शामिल है जो आपके डिवाइस को चाहिए
अनुकूलतालगभग किसी भी डिवाइस पर काम करता हैकेवल मेल खाते आर्किटेक्चर पर काम करता है
के लिए सर्वोत्तमएक फ़ाइल साझा करना जो हर जगह काम करे, अनिश्चित प्राप्तकर्ताआपका अपना उपकरण, जब आप पहले से ही इसकी वास्तुकला जानते हों
जोखिमABI बेमेल का जोखिम बहुत कम हैयदि आप गलत चुनेंगे तो असफल हो जायेंगे या दुर्घटनाग्रस्त हो जायेंगे

स्प्लिट पैकेज के साथ लोग सामान्य गलतियाँ करते हैं

चाबी छीनना

  • ABI वह निर्देश सेट है जिसे एक चिप समझता है; यह केवल उन ऐप्स के लिए मायने रखता है जिनमें मूल (सी/सी++) कोड शामिल है।
  • Arm64-v8a लगभग हर आधुनिक फोन को कवर करता है; Armeabi-v7a पुराने उपकरणों के लिए है; x86/x86_64 अधिकतर एमुलेटर और क्रोमबुक में दिखाई देता है।
  • प्रत्येक डिवाइस पर अनावश्यक मूल कोड भेजने से बचने के लिए ऐप्स को आमतौर पर आर्किटेक्चर द्वारा विभाजित किया जाता है।
  • एक बेमेल आर्किटेक्चर या तो इंस्टालेशन को पूरी तरह से ब्लॉक कर देता है या सफल इंस्टालेशन के बाद तत्काल क्रैश का कारण बनता है।
  • आप कुछ भी इंस्टॉल करने से पहले अपने डिवाइस के आर्किटेक्चर और APK के समर्थित आर्किटेक्चर दोनों की जांच कर सकते हैं, अनुमान लगाने से पूरी तरह बच सकते हैं।

अक्सर पूछे जाने वाले प्रश्न (FAQ)

क्या मुझे सामान्य प्ले स्टोर ऐप इंस्टॉल करने के लिए अपने फ़ोन का आर्किटेक्चर जानने की ज़रूरत है?

नहीं, प्ले स्टोर स्वचालित रूप से आपके डिवाइस का पता लगाता है और केवल मिलान आर्किटेक्चर स्प्लिट प्रदान करता है, इसलिए यह केवल तभी प्रासंगिक हो जाता है जब आप प्ले स्टोर के बाहर से APK को साइडलोड करते हैं।

क्या एक APK एक साथ कई आर्किटेक्चर का समर्थन कर सकता है?

हाँ। एक सार्वभौमिक या मोटा APK प्रत्येक समर्थित आर्किटेक्चर के लिए मूल पुस्तकालयों को एक फ़ाइल में बंडल करता है। यह बड़ा है लेकिन चिप की परवाह किए बिना किसी भी संगत डिवाइस पर इंस्टॉल हो जाएगा।

मेरा परिवर्तित APK इंस्टॉल क्यों हुआ लेकिन फिर तुरंत क्रैश हो गया?

यह आमतौर पर तब होता है जब ऐप में थोड़ी मात्रा में जावा कोड होता है जो ठीक से इंस्टॉल हो जाता है, लेकिन फिर एक मूल लाइब्रेरी को लोड करने का प्रयास करता है जो आपके डिवाइस के आर्किटेक्चर के लिए शामिल नहीं था, रनटाइम पर एक अनसटिस्फाइडलिंक एरर फेंकता है।

क्या Arm64-v8a, Armeabi-v7a ऐप्स के साथ बैकवर्ड संगत है?

आम तौर पर हाँ. अधिकांश arm64-v8a चिप्स 32-बिट एआरएम निर्देशों को भी निष्पादित कर सकते हैं, इसलिए एक armeabi-v7a-only APK आमतौर पर अभी भी आधुनिक arm64 फोन पर चलेगा, इसके विपरीत नहीं।

क्या x86 Android डिवाइस अभी भी 2026 में मौजूद हैं?

वे आज फोन में दुर्लभ हैं, लेकिन आपको अभी भी कुछ पुराने इंटेल-आधारित टैबलेट, Android ऐप चलाने वाले कुछ क्रोमबुक और अधिकांश डेस्कटॉप Android एमुलेटर में x86 या x86_64 मिलेंगे।

आपको इसमें से कुछ भी याद रखने की आवश्यकता नहीं है। संक्षिप्त संस्करण: आधुनिक फोन लगभग हमेशा arm64-v8a होते हैं, जगह बचाने के लिए ऐप्स को आर्किटेक्चर के अनुसार विभाजित किया जाता है, और यदि कोई चीज इंस्टॉल होने से इंकार कर देती है या खुलने के तुरंत बाद क्रैश हो जाती है, तो आर्किटेक्चर बेमेल पहली चीजों में से एक है जिसे खारिज करने लायक है, यह मानने से पहले कि फ़ाइल स्वयं टूट गई है।

एमएसटी शेफेल द्वारा इंजीनियर और प्रलेखित लीड डेवलपर और Android पैकेज आर्किटेक्ट • Android 12-15 पर सत्यापित

Mst Shaefale xapktoapk.com पर क्लाइंट-साइड XAPK/APKS मर्जर, बाइनरी मेनिफेस्ट पार्सर और APK v1+v2 साइनिंग टूल्स का रखरखाव करता है। क्या आपको कोई पुराना कमांड या OS परिवर्तन दिखाई देता है? एक संपादकीय नोट भेजें.