Android سی پی یو آرکیٹیکچر (ABI) کو سمجھنا: arm64-v8a، armeabi-v7a، اور x86 معاملہ کیوں
اگر آپ نے کبھی بھی اسپلٹ APK فائلوں کے سیٹ کو ضم کیا ہے اور اپنے فون کو "ایپ انسٹال نہیں ہے" یا اس سے بھی بدتر ہوتے ہوئے دیکھا ہے، اسے ٹھیک انسٹال ہوتے ہوئے دیکھا ہے کہ آپ نے آئیکن کو ٹیپ کرنے کے فوری طور پر کریش کیا ہے، اس کا ایک اچھا موقع ہے کہ اصل مسئلہ کا خراب ڈاؤن لوڈ سے کوئی تعلق نہیں تھا۔ یہ تقریبا یقینی طور پر فن تعمیر کے بارے میں تھا: آپ کے فون پر چلنے والے CPU اور ایپ کا مقامی کوڈ جس کے لئے مرتب کیا گیا تھا کے درمیان ایک مماثلت نہیں ہے۔ زیادہ تر Android صارفین کو کبھی بھی اس کے بارے میں سوچنے کی ضرورت نہیں ہے، اس وقت تک جب تک یہ خاموشی سے کسی چیز کو توڑ نہیں دیتا، اور پھر یہ تیزی سے متعلقہ ہو جاتا ہے۔ یہاں یہ ہے کہ APK کے لیے CPU فن تعمیر کا کیا مطلب ہے، کیوں Play Store پر ایک ہی ایپ خفیہ طور پر خود کی کئی مختلف ساختوں کے طور پر بھیجتی ہے، اور کسی بھی چیز کو انسٹال کرنے سے پہلے مطابقت کو کیسے چیک کیا جائے۔
ABI کیا ہے؟
اے بی آئی کا مطلب ہے ایپلی کیشن بائنری انٹرفیس۔ عملی اصطلاحات میں، یہ وہ ہدایت ہے جو ایک چپ سمجھتی ہے — خام مشین کوڈ کی شکل جس پر پروسیسر براہ راست عمل کر سکتا ہے۔ زیادہ تر Android ایپ، جاوا یا کوٹلن میں لکھے گئے حصے بائٹ کوڈ میں مرتب ہو جاتے ہیں جو Android رن ٹائم (اے آر ٹی) کے اندر چلتے ہیں، اور اے آر ٹی کو خاص طور پر اس بات کی پرواہ نہیں ہوتی کہ یہ کس چپ پر بیٹھا ہے۔ وہ پرت ڈیزائن کے لحاظ سے فن تعمیر سے متعلق ہے، جو اس بات کا ایک بڑا حصہ ہے کہ Android ایپس عام طور پر ہارڈ ویئر کی اتنی وسیع رینج میں "صرف کام" کیوں کرتی ہیں۔
مقامی کوڈ ایک الگ کہانی ہے۔ بہت ساری ایپس، خاص طور پر گیمز، کیمرہ ایپس، مشین لرننگ ٹولز، اور بھاری آڈیو یا ویڈیو پروسیسنگ کرنے والی کوئی بھی چیز، Android NDK کے ذریعے C یا C++ میں لکھی گئی مقامی لائبریریوں کو بھیجیں۔ وہ لائبریریاں ایک مخصوص انسٹرکشن سیٹ کے لیے مشین کوڈ میں وقت سے پہلے مرتب کی جاتی ہیں، اور ایک انسٹرکشن سیٹ کے لیے بنائی گئی چپ عام طور پر کسی دوسرے کے لیے لکھے گئے مشین کوڈ پر عمل نہیں کر سکتی۔ یہی وجہ ہے کہ ABIs کی ایک قابل فہم چیز کے طور پر موجود ہے: جس لمحے کسی ایپ میں ایک مقامی .so لائبریری بھی شامل ہوتی ہے، اس کی مطابقت ان فن تعمیر سے منسلک ہوجاتی ہے جس کے لیے لائبریری بنائی گئی تھی۔
آرکیٹیکچرز جن میں آپ چلیں گے۔
اس جگہ میں زیادہ قسمیں ہوتی تھیں (سادہ armeabi، یا MIPS یاد رکھیں؟)، لیکن 2026 تک یہ فیلڈ کم ہو کر چار ABIs تک محدود ہو گئی ہے جو جاننے کے قابل ہے:
| اے بی آئی | بٹ کی چوڑائی | عام آلات | نوٹس |
|---|---|---|---|
| arm64-v8a | 64 بٹ ARM | تقریباً 2019 کے بعد سے تقریباً ہر فون فروخت ہوا۔ | نئی ایپس کے لیے طے شدہ ہدف؛ گوگل کو کئی سالوں سے پلے اسٹور کی نئی گذارشات کے لیے 64 بٹ سپورٹ درکار ہے۔ |
| armeabi-v7a | 32 بٹ ARM | پرانے یا بجٹ والے آلات، کچھ کم قیمت والے فون اب بھی ابھرتی ہوئی مارکیٹوں میں فروخت ہوتے ہیں۔ | پسماندہ مطابقت کے لیے اب بھی بہت سی ایپس بھیجی جاتی ہیں، حالانکہ زیادہ تر فعال آلات کو اب اس کی ضرورت نہیں ہے۔ |
| x86 | 32 بٹ انٹیل | پرانے انٹیل پر مبنی گولیاں، میراثی ایمولیٹر | زیادہ تر متروک؛ آپ کو آج شاذ و نادر ہی ایک حقیقی 32 بٹ x86 فون ملے گا۔ |
| x86_64 | 64 بٹ انٹیل | کچھ Chromebooks، ڈیسک ٹاپ Android ایمولیٹرز، چند x86 ٹیبلٹس | اہم ہے اگر آپ ایپس کو ایمولیٹر میں جانچتے ہیں جیسے کہ x86 پر مبنی Android اسٹوڈیو اے وی ڈی یا کچھ BlueStacks کی تعمیر۔ |
اگر آپ کے پاس پچھلے پانچ یا چھ سالوں میں کسی بھی وقت خریدا ہوا فون ہے، تو یہ یقینی طور پر arm64-v8a ہے۔ یاد رکھنے کے قابل مستثنیات ایمولیٹر اور Chromebooks ہیں، جو اکثر اس کے بجائے x86_64 پر چلتے ہیں، کیونکہ یہ بنیادی لیپ ٹاپ یا ڈیسک ٹاپ CPU سے میل کھاتا ہے۔
کیوں ایپس ایک سے زیادہ تعمیرات کی ترسیل کو بالکل پریشان کرتی ہیں۔
ایک واضح سوال یہ ہے کہ ڈویلپرز ہر فن تعمیر کی مقامی لائبریریوں کو صرف ایک APK میں کیوں نہیں بناتے ہیں اور اس کے ساتھ کیا جاتا ہے۔ کچھ ایپس بالکل ایسا ہی کرتی ہیں، اور اسے یونیورسل یا "چربی" APK کہا جاتا ہے۔ منفی پہلو سائز ہے۔ arm64-v8a، armeabi-v7a، x86، اور x86_64 کے لیے مقامی لائبریریوں کے ساتھ ایک گیم جو آپ کے آلے کی ضرورت کے صرف ایک فن تعمیر پر مشتمل ایک عمارت کے مقابلے میں سائز میں آسانی سے دگنا یا تین گنا ہو سکتی ہے۔ اس کو لاکھوں انسٹالز میں ضرب دیں اور آپ اس کوڈ کے لیے ضائع شدہ بینڈوتھ اور اسٹوریج کی حقیقی طور پر قابل قدر مقدار کو دیکھ رہے ہیں جو اس ڈیوائس پر کبھی نہیں چلے گا۔
اس فضلے سے بچنے کے لیے، گوگل پلے اور Android ایپ بنڈل فارمیٹ نے ایک ایپ کو ایک چھوٹے بیس APK کے علاوہ کنفیگریشن APKs کی ایک سیریز میں تقسیم کیا، جن میں سے ایک فن تعمیر کے لیے وقف ہے۔ جب آپ کا فون ایپ کی درخواست کرتا ہے، تو Play اسٹور بیس APK کو صرف اس آرکیٹیکچر اسپلٹ کے ساتھ فراہم کرتا ہے جو آپ کی چپ سے مماثل ہے، اس کے ساتھ مماثل اسکرین کی کثافت اور زبان کی تقسیم بھی۔ آپ ایک انسٹال کے ساتھ ختم ہوتے ہیں جو ایک ہی ایپ کی طرح برتاؤ کرتا ہے لیکن پردے کے پیچھے کئی مقصد سے بنائے گئے ٹکڑوں سے جمع ہوتا ہے۔
اسپلٹ APKs اور ایپ بنڈلز اسے کیسے استعمال کرتے ہیں۔
اگر آپ نے کبھی .apks یا .xapk پیکیج کھولا ہے اور split_config.arm64_v8a.apk، split_config.armeabi_v7a.apk، split_config.xxhdpi.apk، اور split_config.en.apk جیسے فائلوں کے نام base.apk کے ساتھ بیٹھے ہوئے دیکھے ہیں، تو بالکل یہی نظام عمل میں ہے، پلے اسٹور کے بجائے خاموشی سے ڈیلیور کرنے کے بجائے فائلوں کے سیٹ کے طور پر برآمد کیا جاتا ہے۔ کثافت اور زبان کی تقسیم عام طور پر اندھا دھند انسٹال کرنے کے لیے محفوظ ہوتی ہے کیونکہ فون صرف ان وسائل کو نظر انداز کر دے گا جن کی اسے ضرورت نہیں ہے۔ فن تعمیر کی تقسیم مختلف ہے: غلط انسٹال کریں، یا مماثل کو انسٹال کرنے میں ناکام رہیں، اور آپ حقیقی پریشانی میں پڑ جائیں گے۔
جب آپ ایک کنورٹر کا استعمال کرتے ہوئے ایک اسپلٹ پیکج کو دوبارہ ایک واحد انسٹال کیے جانے کے قابل APK میں ضم کرتے ہیں، تو انضمام کے عمل کو یہ چننا ہوتا ہے کہ کون سا فن تعمیر اسپلٹ کو فولڈ کرنا ہے۔ ایک اچھا کنورٹر ہر فن تعمیر کو اسپلٹ رکھتا ہے جو حقیقی طور پر مفید ہے، یا آپ کو خاموشی سے صرف ایک کو رکھنے اور امید کرنے کے بجائے کہ یہ آپ کے آلے سے میل کھاتا ہے۔
جب فن تعمیر سے میل نہیں کھاتا ہے تو کیا ہوتا ہے۔
ناکامی کے دو الگ الگ طریقے ہیں جنہیں جاننے کے قابل ہے، کیونکہ وہ ایک عام صارف سے مختلف نظر آتے اور محسوس کرتے ہیں۔
سب سے پہلے مکمل طور پر انسٹال کی ناکامی ہے۔ اگر کوئی ایپ تقریباً مکمل طور پر مقامی کوڈ کے ارد گرد بنائی گئی ہے جس میں کوئی معنی خیز فال بیک نہیں ہے، تو Android کا پیکیج مینیجر اسے انسٹال کرنے سے بالکل انکار کر دے گا، عام طور پر INSTALL_FAILED_NO_MATCHING_ABIS جیسی خرابی سامنے آتی ہے۔ آپ کبھی بھی ایپ کھول نہیں پائیں گے۔ انسٹالر آپ کو دروازے پر روکتا ہے۔
دوسرا، زیادہ مایوس کن نتیجہ ایک خاموش جزوی کامیابی ہے۔ اگر کسی ایپ میں جاوا یا کوٹلن انٹری پوائنٹ ہے جو خود ہی ٹھیک ہو جاتا ہے، لیکن پھر کسی مقامی لائبریری میں کال کرنے کی کوشش کرتا ہے جو آپ کے فن تعمیر کے لیے صرف موجود نہیں ہے، تو انسٹال عام طور پر مکمل ہو جاتا ہے۔ جب تک آپ آئیکن کو تھپتھپاتے ہیں تب تک سب کچھ ٹھیک نظر آتا ہے، جس مقام پر ایپ تقریباً فوراً کریش ہو جاتی ہے، اکثر لاگز میں دفن UnsatisfiedLinkError کے ساتھ۔ یہ کلاسک ہے "میں نے اسے تبدیل کیا، اسے انسٹال کیا، پھر یہ فوری طور پر بند ہو جاتا ہے" کہانی، اور یہ خراب فائل کے بجائے تقریباً ہمیشہ فن تعمیر کا مسئلہ ہوتا ہے۔
اپنے فون کے فن تعمیر کو کیسے چیک کریں۔
لوگوں کی اکثریت کے لیے یہ آسان ہے: اگر آپ کا فون 2019 یا اس کے بعد کا ہے، تو arm64-v8a فرض کریں اور آگے بڑھیں۔ اگر آپ یقین کرنا چاہتے ہیں، یا آپ کسی پرانے یا غیر معمولی ڈیوائس کے ساتھ کام کر رہے ہیں، تو چند عملی اختیارات:
- اپنے فون کے عین مطابق چپ سیٹ کا ماڈل دیکھیں (باکس پر، دستی میں، یا GSMArena جیسی سائٹ پر نظر آتا ہے) اور تلاش کریں کہ آیا وہ چپ سیٹ 32 بٹ ہے یا 64-بٹ ARM۔
- ایک ہلکا پھلکا سسٹم انفارمیشن ایپ انسٹال کریں جو سی پی یو فن تعمیر کو براہ راست رپورٹ کرتی ہے، اس مقصد کے لیے خاص طور پر کئی مفت موجود ہیں۔
- چیک کریں کہ آیا فون Android 9 کے ساتھ بھیج دیا گیا ہے یا اس کے بعد کے اصل OS ورژن کے طور پر؛ اس دور کے آس پاس سے گوگل کی 64-بٹ تقاضے arm64-v8a کو لازمی طور پر کسی بھی چیز کی ضمانت دیتے ہیں جو اہل ہے۔
یہ کیسے چیک کریں کہ APK کس فن تعمیر کو سپورٹ کرتا ہے۔
پلے اسٹور کے باہر سے فائل انسٹال کرنے سے پہلے، اندازہ لگانے کے بجائے اس کے اندر کیا ہے اس کی تصدیق کرنا ضروری ہے۔ ایک APK کی مقامی لائبریریز lib/ ڈائرکٹری کے اندر اپنے فن تعمیر کے نام پر رکھے گئے فولڈرز میں رہتی ہیں، جیسے lib/arm64-v8a/ یا lib/armeabi-v7a/۔ کوئی بھی ٹول جو APK کے اندرونی ڈھانچے کا معائنہ کر سکتا ہے وہ آپ کو بالکل بتا سکتا ہے کہ ان میں سے کون سا فولڈر موجود ہے، جو آپ کو بتاتا ہے کہ فائل کن ڈیوائسز پر چلے گی۔
انسٹال کرنے سے پہلے چیک کریں۔
ہمارا APK معلوماتی ٹول ایک APK کے اندرونی lib/ فولڈر کو پڑھتا ہے اور ہر اس فن تعمیر کی فہرست دیتا ہے جس کے لیے اسے بنایا گیا تھا، لہذا آپ کسی بھی چیز کو سائیڈ لوڈ کرنے سے پہلے مطابقت کی تصدیق کر سکتے ہیں۔ جب آپ ہمارے XAPK سے APK کنورٹر کے ساتھ اسپلٹ پیکج کو تبدیل کرتے ہیں، تو ہم اسے بھی ہر تبدیلی کے بعد خود بخود ظاہر کرتے ہیں، ضم شدہ فائل میں پائے جانے والے آرکیٹیکچرز کی فہرست بناتے ہیں اور جب کسی تعمیر میں ایسا ٹکڑا غائب ہوتا ہے جس کی عام آلات کو ضرورت ہوتی ہے تو اسے جھنڈا لگاتے ہیں۔
یونیورسل APK بمقابلہ سنگل-ABI APK: آپ کو کون سا استعمال کرنا چاہئے؟
| معیار | یونیورسل / چربی APK | سنگل-ABI APK |
|---|---|---|
| فائل کا سائز | بڑا، کبھی کبھی 2-4x | چھوٹا، صرف وہی پر مشتمل ہے جو آپ کے آلے کی ضرورت ہے۔ |
| مطابقت | تقریبا کسی بھی ڈیوائس پر کام کرتا ہے۔ | صرف مماثل فن تعمیر پر کام کرتا ہے۔ |
| کے لیے بہترین | ایک فائل کا اشتراک کرنا جو ہر جگہ کام کرے، غیر یقینی وصول کنندگان | آپ کا اپنا آلہ، جب آپ اس کے فن تعمیر کو پہلے سے جانتے ہیں۔ |
| خطرہ | ABI کی مماثلت کا بہت کم خطرہ | اگر آپ غلط کو منتخب کرتے ہیں تو ناکام ہو جائیں گے یا کریش ہو جائیں گے۔ |
عام غلطیاں جو لوگ اسپلٹ پیکجز کے ساتھ کرتے ہیں۔
- فرض کریں کہ ہر تقسیم اختیاری ہے۔ کثافت اور زبان کی تقسیم عام طور پر ہوتی ہے، لیکن فن تعمیر کی تقسیم نہیں ہوتی ہے۔ انضمام کے دوران اسے کبھی نہ چھوڑیں۔
- آئینے کی جگہ سے صرف ایک فن تعمیر کو الگ کرنا۔ اگر فریق ثالث کا ڈاؤن لوڈ صرف armeabi-v7a سلائس کی پیشکش کرتا ہے، تو یہ کسی ایسے آلے پر ناکام ہو سکتا ہے جس کے بجائے arm64-v8a کی ضرورت ہو، حالانکہ ایپ خود ہی جائز ہے۔
- بھول جانا کہ گولیاں اور Chromebooks ہمیشہ ARM نہیں ہوتے ہیں۔ Android ایپس چلانے والی کافی تعداد میں Chromebooks، اور کچھ پرانے ٹیبلٹس، ARM کے بجائے x86 یا x86_64 ہیں۔
- x86 ایمولیٹر کے اندر صرف ARM APK کی جانچ کرنا۔ کچھ پرانے ایمولیٹر بلڈز x86 پر چلتے ہیں، اور ایک APK جو صرف ARM مقامی لائبریریوں کو بھیجتا ہے، ان کے اندر لانچ نہیں ہوتا، قطع نظر اس کے کہ APK کو کیسے پیک کیا گیا تھا۔
- "سنگل-ABI" کے ساتھ "یونیورسل" کو الجھانے والا۔ ایک عالمگیر APK جان بوجھ کر بڑا ہے کیونکہ اس میں سب کچھ شامل ہے۔ ایک واحد ABI APK چھوٹا ہے اور جان بوجھ کر ایک چپ فیملی تک محدود ہے۔
کلیدی ٹیک ویز
- ABI وہ ہدایت ہے جو ایک چپ سمجھتا ہے۔ یہ صرف ان ایپس کے لیے اہمیت رکھتا ہے جن میں مقامی (C/C++) کوڈ شامل ہے۔
- arm64-v8a تقریباً ہر جدید فون کا احاطہ کرتا ہے۔ armeabi-v7a پرانے آلات کے لیے ہے۔ x86/x86_64 زیادہ تر ایمولیٹرز اور Chromebook میں ظاہر ہوتا ہے۔
- ہر ڈیوائس پر غیر ضروری مقامی کوڈ بھیجنے سے بچنے کے لیے ایپس کو عام طور پر فن تعمیر کے لحاظ سے تقسیم کیا جاتا ہے۔
- ایک غیر مماثل فن تعمیر یا تو تنصیب کو مکمل طور پر روکتا ہے یا بظاہر کامیاب انسٹال کے بعد فوری طور پر کریش کا سبب بنتا ہے۔
- آپ کسی بھی چیز کو انسٹال کرنے سے پہلے اپنے آلے کے فن تعمیر اور APK کے تعاون یافتہ فن تعمیر دونوں کو چیک کر سکتے ہیں، اندازے سے مکمل طور پر گریز کرتے ہوئے
اکثر پوچھے گئے سوالات (FAQ)
کیا مجھے ایک عام Play Store ایپ انسٹال کرنے کے لیے اپنے فون کا فن تعمیر جاننے کی ضرورت ہے؟
نہیں۔ Play Store خود بخود آپ کے آلے کا پتہ لگاتا ہے اور صرف مماثل فن تعمیر کی تقسیم فراہم کرتا ہے، لہذا یہ تب ہی متعلقہ ہو جاتا ہے جب آپ Play Store کے باہر سے APKs کو سائڈ لوڈ کرتے ہیں۔
کیا ایک APK ایک ہی وقت میں متعدد فن تعمیرات کو سپورٹ کر سکتا ہے؟
جی ہاں ایک یونیورسل یا فیٹ APK ایک فائل میں ہر تعاون یافتہ فن تعمیر کے لیے مقامی لائبریریوں کو بنڈل کرتا ہے۔ یہ بڑا ہے لیکن چپ سے قطع نظر کسی بھی مطابقت پذیر ڈیوائس پر انسٹال ہوگا۔
میرا تبدیل شدہ APK کیوں انسٹال ہوا لیکن پھر فوری طور پر کریش ہو گیا؟
یہ عام طور پر اس وقت ہوتا ہے جب ایپ کے پاس جاوا کوڈ کی تھوڑی مقدار ہوتی ہے جو ٹھیک انسٹال ہو جاتی ہے، لیکن پھر وہ مقامی لائبریری لوڈ کرنے کی کوشش کرتی ہے جو آپ کے آلے کے فن تعمیر کے لیے شامل نہیں تھی، رن ٹائم پر غیر مطمئن لنک کی خرابی پھینک دیتی ہے۔
کیا arm64-v8a بیکورڈ armeabi-v7a ایپس کے ساتھ مطابقت رکھتا ہے؟
عام طور پر ہاں۔ زیادہ تر arm64-v8a چپس 32-bit ARM ہدایات پر بھی عمل کر سکتی ہیں، لہذا ایک armeabi-v7a-only APK عام طور پر اب بھی جدید arm64 فون پر چلے گا، بالکل دوسری طرف نہیں۔
کیا 2026 میں بھی x86 Android ڈیوائسز موجود ہیں؟
وہ آج کل فونز میں نایاب ہیں، لیکن آپ کو پھر بھی کچھ پرانے Intel پر مبنی ٹیبلٹس میں x86 یا x86_64 ملیں گے، Android ایپس چلانے والی مٹھی بھر Chromebooks، اور زیادہ تر ڈیسک ٹاپ Android ایمولیٹرز۔
آپ کو اس میں سے کسی کو یاد کرنے کی ضرورت نہیں ہے۔ مختصر ورژن: جدید فونز تقریباً ہمیشہ arm64-v8a ہوتے ہیں، ایپس کو جگہ بچانے کے لیے فن تعمیر کے ذریعے تقسیم کیا جاتا ہے، اور اگر کوئی چیز انسٹال ہونے سے انکار کر دیتی ہے یا کھلنے کے فوراً بعد کریش ہو جاتی ہے، تو فن تعمیر کی مماثلت ان اولین چیزوں میں سے ایک ہے جس کو مسترد کرنے کے قابل ہے اس سے پہلے کہ یہ فرض کر لیا جائے کہ فائل خود ٹوٹ گئی ہے۔