Android সিপিইউ আর্কিটেকচার (ABI) বোঝা: কেন arm64-v8a, armeabi-v7a, এবং x86 ম্যাটার
আপনি যদি কখনও বিভক্ত APK ফাইলগুলির একটি সেট মার্জ করে থাকেন এবং আপনার ফোনটিকে "অ্যাপ ইনস্টল করা হয়নি" বা তার চেয়েও খারাপ অবস্থায় দেখেছেন, আপনি আইকনটি ট্যাপ করার সাথে সাথেই ক্র্যাশ করার জন্য এটিকে ফাইন ইন্সটল হতে দেখেছেন, তাহলে একটি দূষিত ডাউনলোডের সাথে আসল সমস্যাটির কোনো সম্পর্ক নেই। এটি প্রায় নিশ্চিতভাবেই আর্কিটেকচার সম্পর্কে ছিল: আপনার ফোন যে CPU-এ চলে এবং CPU-এর মধ্যে অ্যাপটির নেটিভ কোড কম্পাইল করা হয়েছিল তার মধ্যে একটি অমিল। বেশিরভাগ Android ব্যবহারকারীদের কখনই এটি নিয়ে ভাবতে হবে না, যতক্ষণ না এটি নিঃশব্দে কিছু ভেঙে দেয় এবং তারপরে এটি দ্রুত প্রাসঙ্গিক হয়ে যায়। একটি APK-এর জন্য CPU আর্কিটেকচারের অর্থ কী, কেন প্লে স্টোরে একটি একক অ্যাপ গোপনে নিজের বিভিন্ন বিল্ড হিসাবে পাঠানো হয় এবং আপনি কিছু ইনস্টল করার আগে কীভাবে সামঞ্জস্যতা পরীক্ষা করবেন তা এখানে রয়েছে।
একটি ABI কি
ABI এর অর্থ হল অ্যাপ্লিকেশন বাইনারি ইন্টারফেস। ব্যবহারিক পরিভাষায়, এটি একটি চিপ বোঝে নির্দেশনা সেট - একটি প্রসেসর সরাসরি কার্যকর করতে পারে কাঁচা মেশিন কোড বিন্যাস। একটি Android অ্যাপের বেশিরভাগ অংশ, জাভা বা কোটলিনে লেখা অংশগুলি বাইটকোডে সংকলিত হয় যা Android রানটাইম (এআরটি) এর ভিতরে চলে এবং এআরটি কোন চিপে বসে আছে তা বিশেষভাবে চিন্তা করে না। এই স্তরটি ডিজাইনের দ্বারা স্থাপত্য-অজ্ঞেয়বাদী, যা একটি বড় অংশ কেন Android অ্যাপগুলি সাধারণত এত বিস্তৃত হার্ডওয়্যার জুড়ে "শুধু কাজ করে"৷
নেটিভ কোড একটি ভিন্ন গল্প. প্রচুর অ্যাপ, বিশেষ করে গেমস, ক্যামেরা অ্যাপস, মেশিন-লার্নিং টুলস, এবং ভারী অডিও বা ভিডিও প্রসেসিং করার মতো কিছু, Android NDK-এর মাধ্যমে C বা C++-এ লেখা নেটিভ লাইব্রেরি পাঠান। এই লাইব্রেরিগুলি একটি নির্দিষ্ট নির্দেশ সেটের জন্য মেশিন কোডে সময়ের আগে সংকলিত হয় এবং একটি নির্দেশ সেটের জন্য নির্মিত একটি চিপ সাধারণত অন্যটির জন্য লেখা মেশিন কোড কার্যকর করতে পারে না। এটিই সম্পূর্ণ কারণ ABI-গুলি বোঝার মতো কিছু হিসাবে বিদ্যমান: যে মুহুর্তে একটি অ্যাপ এমনকি একটি নেটিভ .so লাইব্রেরি অন্তর্ভুক্ত করে, তার সামঞ্জস্যতা সেই আর্কিটেকচারের সাথে আবদ্ধ হয়ে যায় যার জন্য লাইব্রেরি তৈরি করা হয়েছিল।
যে আর্কিটেকচারে আপনি দৌড়াবেন
এই স্থানটিতে আরও বৈচিত্র্য ছিল (মনে রাখবেন প্লেইন armeabi, নাকি MIPS?), কিন্তু 2026 সালের মধ্যে ক্ষেত্রটি চারটি ABI-এ সঙ্কুচিত হয়েছে যা জানার মতো:
| ABI | বিট প্রস্থ | সাধারণ ডিভাইস | নোট |
|---|---|---|---|
| arm64-v8a | 64-বিট এআরএম | 2019 সাল থেকে কার্যত প্রতিটি ফোন বিক্রি হয়েছে | নতুন অ্যাপের জন্য ডিফল্ট টার্গেট; গুগলের এখন বেশ কয়েক বছর ধরে নতুন প্লে স্টোর জমা দেওয়ার জন্য 64-বিট সমর্থন প্রয়োজন। |
| armeabi-v7a | 32-বিট এআরএম | পুরানো বা বাজেট ডিভাইস, কিছু কম দামের ফোন এখনও উদীয়মান বাজারে বিক্রি হয় | পশ্চাদগামী সামঞ্জস্যের জন্য এখনও অনেক অ্যাপ দ্বারা পাঠানো হয়েছে, যদিও বেশিরভাগ সক্রিয় ডিভাইসের আর এটির প্রয়োজন নেই। |
| x86 | 32-বিট ইন্টেল | পুরানো ইন্টেল-ভিত্তিক ট্যাবলেট, লিগ্যাসি এমুলেটর | বেশিরভাগই অপ্রচলিত; আপনি আজ খুব কমই একটি বাস্তব 32-বিট x86 ফোনের মুখোমুখি হবেন। |
| x86_64 | 64-বিট ইন্টেল | কিছু ক্রোমবুক, ডেস্কটপ Android এমুলেটর, কয়েকটি x86 ট্যাবলেট | আপনি যদি x86-ভিত্তিক Android স্টুডিও AVD বা নির্দিষ্ট BlueStacks বিল্ডের মতো কোনো এমুলেটরে অ্যাপগুলি পরীক্ষা করেন তাহলে গুরুত্বপূর্ণ৷ |
আপনি যদি গত পাঁচ বা ছয় বছরে কেনা একটি ফোন ধরে থাকেন তবে এটি প্রায় অবশ্যই arm64-v8a। মনে রাখার মতো ব্যতিক্রমগুলি হল এমুলেটর এবং ক্রোমবুক, যা প্রায়শই x86_64 এর পরিবর্তে চলে, কারণ এটি অন্তর্নিহিত ল্যাপটপ বা ডেস্কটপ CPU-এর সাথে মেলে।
কেন অ্যাপ্লিকেশানগুলি শিপিং একাধিক বিল্ডে বিরক্ত করে
একটি সুস্পষ্ট প্রশ্ন হল কেন বিকাশকারীরা প্রতিটি আর্কিটেকচারের নেটিভ লাইব্রেরিগুলিকে একটি একক APK তে ক্র্যাম করে না এবং এটি দিয়ে করা হয়। কিছু অ্যাপ্লিকেশান ঠিক এটি করে, এবং এটিকে একটি সর্বজনীন বা "ফ্যাট" APK বলা হয়। নেতিবাচক দিক হল আকার। arm64-v8a, armeabi-v7a, x86, এবং x86_64-এর জন্য নেটিভ লাইব্রেরি সহ একটি গেম যা আপনার ডিভাইসের প্রয়োজন শুধুমাত্র একটি আর্কিটেকচার সমন্বিত একটি বিল্ডের তুলনায় সহজেই দ্বিগুণ বা তিনগুণ হতে পারে। লক্ষ লক্ষ ইনস্টল জুড়ে এটিকে গুণ করুন এবং আপনি সেই ডিভাইসে কখনই চলবে না এমন কোডের জন্য একটি সত্যিকারের উল্লেখযোগ্য পরিমাণ নষ্ট ব্যান্ডউইথ এবং স্টোরেজ দেখছেন।
সেই অপচয় এড়াতে, Google Play এবং Android App Bundle ফর্ম্যাট একটি অ্যাপকে একটি ছোট বেস APK প্লাস কনফিগারেশন APK-এর একটি সিরিজে বিভক্ত করেছে, যার মধ্যে একটি আর্কিটেকচারের জন্য নিবেদিত। যখন আপনার ফোন অ্যাপটির জন্য অনুরোধ করে, তখন প্লে স্টোর বেস APK প্রদান করে শুধুমাত্র আর্কিটেকচার স্প্লিট সহ যা আপনার চিপের সাথে মেলে, সাথে স্ক্রীন-ঘনত্ব এবং ভাষা বিভাজনের সাথে মেলে। আপনি একটি ইনস্টলের সাথে শেষ করেন যা একটি একক অ্যাপের মতো আচরণ করে তবে পর্দার পিছনে বেশ কয়েকটি উদ্দেশ্য-নির্মিত টুকরা থেকে একত্রিত হয়।
কিভাবে স্প্লিট APK এবং অ্যাপ বান্ডেল এটি ব্যবহার করে
আপনি যদি কখনও একটি .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-বিট এআরএম কিনা তা অনুসন্ধান করুন৷
- একটি লাইটওয়েট সিস্টেম-ইনফরমেশন অ্যাপ ইনস্টল করুন যা সরাসরি CPU আর্কিটেকচারের রিপোর্ট করে, বেশ কিছু বিনামূল্যের এই উদ্দেশ্যে বিশেষভাবে বিদ্যমান।
- ফোনটি Android 9 বা তার পরের আসল ওএস সংস্করণ হিসাবে পাঠানো হয়েছে কিনা তা পরীক্ষা করুন; সেই যুগ থেকে Google-এর 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 প্রয়োজন, যদিও অ্যাপটি নিজেই বৈধ।
- ভুলে যাওয়া যে ট্যাবলেট এবং ক্রোমবুক সবসময় এআরএম হয় না। প্রচুর ক্রোমবুক অ্যানড্রয়েড অ্যাপ্লিকেশান চালায়, এবং কিছু পুরানো ট্যাবলেট এআরএম-এর পরিবর্তে 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)
একটি সাধারণ প্লে স্টোর অ্যাপ ইনস্টল করতে আমার ফোনের আর্কিটেকচার জানতে হবে?
না। প্লে স্টোর স্বয়ংক্রিয়ভাবে আপনার ডিভাইস শনাক্ত করে এবং শুধুমাত্র মিলে যাওয়া আর্কিটেকচার বিভাজন প্রদান করে, তাই এটি শুধুমাত্র তখনই প্রাসঙ্গিক হয়ে ওঠে যখন আপনি প্লে স্টোরের বাইরে থেকে APK সাইডলোড করেন।
একটি APK একসাথে একাধিক আর্কিটেকচার সমর্থন করতে পারে?
হ্যাঁ। একটি সার্বজনীন বা চর্বিযুক্ত APK একটি ফাইলে প্রতিটি সমর্থিত আর্কিটেকচারের জন্য নেটিভ লাইব্রেরি বান্ডিল করে। এটি বড় কিন্তু চিপ নির্বিশেষে যেকোনো সামঞ্জস্যপূর্ণ ডিভাইসে ইনস্টল করা হবে।
কেন আমার রূপান্তরিত APK ইনস্টল করা হয়েছে কিন্তু তারপর অবিলম্বে ক্র্যাশ?
এটি সাধারণত ঘটে যখন অ্যাপটিতে অল্প পরিমাণে জাভা কোড থাকে যা সূক্ষ্মভাবে ইনস্টল করে, কিন্তু তারপর একটি নেটিভ লাইব্রেরি লোড করার চেষ্টা করে যা আপনার ডিভাইসের আর্কিটেকচারের জন্য অন্তর্ভুক্ত ছিল না, রানটাইমে একটি অসন্তুষ্ট লিঙ্ক ত্রুটি ফেলে দেয়।
arm64-v8a ব্যাকওয়ার্ড কি armeabi-v7a অ্যাপের সাথে সামঞ্জস্যপূর্ণ?
সাধারণত হ্যাঁ. বেশিরভাগ arm64-v8a চিপগুলি 32-বিট এআরএম নির্দেশাবলীও কার্যকর করতে পারে, তাই একটি armeabi-v7a-only APK সাধারণত এখনও একটি আধুনিক arm64 ফোনে চলবে, ঠিক অন্যভাবে নয়।
x86 Android ডিভাইসগুলি কি 2026 এর কাছাকাছি আছে?
এগুলি আজ ফোনে বিরল, তবে আপনি এখনও কিছু পুরানো ইন্টেল-ভিত্তিক ট্যাবলেটে x86 বা x86_64 পাবেন, কিছু সংখ্যক ক্রোমবুক যা Android অ্যাপ চালাচ্ছেন এবং বেশিরভাগ ডেস্কটপ Android এমুলেটর পাবেন৷
আপনাকে এর কোনটি মুখস্থ করার দরকার নেই। সংক্ষিপ্ত সংস্করণ: আধুনিক ফোনগুলি প্রায় সবসময়ই arm64-v8a হয়, স্থান বাঁচাতে অ্যাপগুলি আর্কিটেকচার দ্বারা বিভক্ত হয়ে যায়, এবং যদি কিছু খোলার পরেই ইনস্টল করতে অস্বীকার করে বা ক্র্যাশ হয়ে যায়, তাহলে ফাইলটি নিজেই ভেঙে গেছে বলে ধরে নেওয়ার আগে আর্কিটেকচারের অমিল হওয়াটা উড়িয়ে দেওয়া উচিত।