অ্যান্ড্রয়েড অ্যাপ বান্ডেল ফর্ম্যাট

একটি Android অ্যাপ বান্ডেল হল একটি ফাইল ( .aab ফাইল এক্সটেনশন সহ) যা আপনি Google Play-তে আপলোড করেন।

অ্যাপ বান্ডেলগুলি হল স্বাক্ষরিত বাইনারি যা আপনার অ্যাপের কোড এবং সংস্থানগুলিকে মডিউলগুলিতে সংগঠিত করে, যেমনটি চিত্র 1-এ দেখানো হয়েছে৷ প্রতিটি মডিউলের কোড এবং সংস্থানগুলি আপনি একটি APK-এ যা পাবেন তার অনুরূপভাবে সংগঠিত হয়—এবং এটি অর্থবহ কারণ এই মডিউলগুলির প্রতিটি হতে পারে আলাদা APK হিসেবে তৈরি করা হয়েছে। Google Play তারপর অ্যাপ বান্ডেল ব্যবহার করে ব্যবহারকারীদের কাছে পরিবেশিত বিভিন্ন APK, যেমন বেস APK, বৈশিষ্ট্য APK, কনফিগারেশন APK এবং (যে ডিভাইসগুলি বিভক্ত APK সমর্থন করে না) মাল্টি-এপিকে তৈরি করতে ব্যবহার করে। যে ডাইরেক্টরিগুলি নীল রঙে রঙ করা হয়—যেমন drawable/ , values/ , এবং lib/ ডিরেক্টরিগুলি—কোড এবং সংস্থানগুলিকে প্রতিনিধিত্ব করে যা Google Play প্রতিটি মডিউলের জন্য কনফিগারেশন APK তৈরি করতে ব্যবহার করে৷

অ্যাপ বান্ডেলগুলি আপনার অ্যাপকে এমন ডিরেক্টরিগুলিতে সংগঠিত করে যেগুলির প্রত্যেকটি একটি মডিউল প্রতিনিধিত্ব করে। প্রতিটি মডিউল ডিরেক্টরির মধ্যে, কোড এবং সংস্থানগুলি একটি সাধারণ APK-এর মতোই সংগঠিত হয়৷

চিত্র 1. একটি বেস মডিউল, দুটি বৈশিষ্ট্য মডিউল এবং দুটি সম্পদ প্যাক সহ একটি অ্যান্ড্রয়েড অ্যাপ বান্ডেলের বিষয়বস্তু৷

নিম্নলিখিত তালিকাটি আরও বিশদে অ্যাপ বান্ডেলের কিছু ফাইল এবং ডিরেক্টরি বর্ণনা করে:

  • base/, feature1/, এবং feature2/: এই টপ-লেভেল ডিরেক্টরিগুলির প্রতিটি আপনার অ্যাপের আলাদা মডিউল উপস্থাপন করে। আপনার অ্যাপের বেস মডিউল সবসময় অ্যাপ বান্ডেলের একটি base ডিরেক্টরিতে থাকে। যাইহোক, প্রতিটি বৈশিষ্ট্য মডিউলের জন্য ডিরেক্টরিকে মডিউলের ম্যানিফেস্টে split বৈশিষ্ট্য দ্বারা নির্দিষ্ট নাম দেওয়া হয়। আরও জানতে, বৈশিষ্ট্য মডিউল ম্যানিফেস্ট সম্পর্কে পড়ুন।
  • asset_pack_1/ এবং asset_pack_2/: বড়, গ্রাফিক্যালি-ডিমান্ডিং অ্যাপ বা গেমের জন্য, আপনি অ্যাসেট প্যাকগুলিতে সম্পদগুলিকে মডুলারাইজ করতে পারেন। অ্যাসেট প্যাকগুলি তাদের বড় আকারের সীমার কারণে গেমগুলির জন্য আদর্শ। আপনি তিনটি ডেলিভারি মোড অনুসারে প্রতিটি অ্যাসেট প্যাক কীভাবে এবং কখন একটি ডিভাইসে ডাউনলোড করা হবে তা কাস্টমাইজ করতে পারেন: ইনস্টল-টাইম, দ্রুত-অনুসরণ এবং অন-ডিমান্ড। সমস্ত সম্পদ প্যাক হোস্ট করা হয় এবং Google Play থেকে পরিবেশন করা হয়। কীভাবে আপনার অ্যাপ বান্ডেলে অ্যাসেট প্যাক যোগ করবেন সে সম্পর্কে আরও জানতে, Play অ্যাসেট ডেলিভারি ওভারভিউ দেখুন।
  • BUNDLE-METADATA/: এই ডিরেক্টরিতে এমন মেটাডেটা ফাইল রয়েছে যা টুল বা অ্যাপ স্টোরের জন্য দরকারী তথ্য ধারণ করে। এই ধরনের মেটাডেটা ফাইলগুলিতে ProGuard ম্যাপিং এবং আপনার অ্যাপের DEX ফাইলগুলির সম্পূর্ণ তালিকা অন্তর্ভুক্ত থাকতে পারে। এই ডিরেক্টরির ফাইলগুলি আপনার অ্যাপের APKগুলিতে প্যাকেজ করা হয় না৷
  • মডিউল প্রোটোকল বাফার ( *.pb ) ফাইল: এই ফাইলগুলি মেটাডেটা প্রদান করে যা প্রতিটি অ্যাপ মডিউলের বিষয়বস্তু অ্যাপ স্টোরে বর্ণনা করতে সাহায্য করে, যেমন Google Play। উদাহরণ স্বরূপ, BundleConfig.pb বান্ডেল সম্পর্কে তথ্য প্রদান করে, যেমন অ্যাপ বান্ডেল তৈরি করতে বিল্ড টুলের কোন সংস্করণ ব্যবহার করা হয়েছে, এবং native.pb এবং resources.pb প্রতিটি মডিউলের কোড এবং সংস্থান বর্ণনা করে, যেটি যখন কাজে লাগে Google Play বিভিন্ন ডিভাইস কনফিগারেশনের জন্য APKগুলিকে অপ্টিমাইজ করে৷
  • manifest/: APKs থেকে ভিন্ন, অ্যাপ বান্ডেলগুলি এই পৃথক ডিরেক্টরিতে প্রতিটি মডিউলের AndroidManifest.xml ফাইল সংরক্ষণ করে।
  • dex/: APK-এর বিপরীতে, অ্যাপ বান্ডেলগুলি এই পৃথক ডিরেক্টরিতে প্রতিটি মডিউলের জন্য DEX ফাইল সংরক্ষণ করে।
  • res/, lib/, এবং assets/: এই ডিরেক্টরিগুলি একটি সাধারণ APK-এর সাথে অভিন্ন৷ আপনি যখন আপনার অ্যাপ বান্ডেল আপলোড করেন, তখন Google Play এই ডিরেক্টরিগুলি পরিদর্শন করে এবং ফাইল পাথগুলি সংরক্ষণ করার সময় শুধুমাত্র সেই ফাইলগুলিকে প্যাকেজ করে যা লক্ষ্য ডিভাইস কনফিগারেশনকে সন্তুষ্ট করে।
  • root/: এই ডিরেক্টরিটি ফাইলগুলিকে সঞ্চয় করে যেগুলি পরবর্তীতে যেকোন APK-এর রুটে স্থানান্তরিত হয় যাতে এই ডিরেক্টরিটি যে মডিউলটি রয়েছে তা অন্তর্ভুক্ত করে৷ উদাহরণস্বরূপ, একটি অ্যাপ বান্ডেলের base/root/ ডিরেক্টরিতে জাভা-ভিত্তিক সংস্থান থাকতে পারে যা আপনার অ্যাপ Class.getResource() ব্যবহার করে লোড হয়। এই ফাইলগুলি পরে আপনার অ্যাপের বেস APK-এর রুট ডিরেক্টরিতে এবং Google Play তৈরি করা প্রতিটি মাল্টি-APK-এ স্থানান্তরিত হয়। এই ডিরেক্টরির মধ্যে পাথগুলিও সংরক্ষিত আছে। অর্থাৎ, ডিরেক্টরিগুলি (এবং তাদের সাবডিরেক্টরিগুলি)ও APK-এর রুটে স্থানান্তরিত হয়৷

বিভক্ত APK এর ওভারভিউ

অপ্টিমাইজ করা অ্যাপ্লিকেশন পরিবেশন করার একটি মৌলিক উপাদান হল Android 5.0 (API স্তর 21) এবং উচ্চতর সংস্করণে উপলব্ধ স্প্লিট APK প্রক্রিয়া। স্প্লিট APKগুলি নিয়মিত APK-এর মতোই হয়- এতে কম্পাইল করা DEX বাইটকোড, সংস্থান এবং একটি Android ম্যানিফেস্ট অন্তর্ভুক্ত রয়েছে। যাইহোক, অ্যান্ড্রয়েড প্ল্যাটফর্ম একাধিক ইনস্টল করা স্প্লিট APK কে একটি একক অ্যাপ হিসাবে বিবেচনা করতে সক্ষম। অর্থাৎ, আপনি একাধিক বিভক্ত APK ইনস্টল করতে পারেন যেগুলির সাধারণ কোড এবং সংস্থানগুলিতে অ্যাক্সেস রয়েছে এবং ডিভাইসে একটি ইনস্টল করা অ্যাপ হিসাবে উপস্থিত হয়৷

বিভক্ত APK-এর সুবিধা হল একটি মনোলিথিক APK-কে বিভক্ত করার ক্ষমতা—অর্থাৎ, একটি APK যাতে আপনার অ্যাপ সমর্থন করে এমন সমস্ত বৈশিষ্ট্য এবং ডিভাইস কনফিগারেশনের জন্য কোড এবং সংস্থানগুলি অন্তর্ভুক্ত করে—একটি ব্যবহারকারীর ডিভাইসে প্রয়োজন অনুযায়ী ইনস্টল করা ছোট, বিচ্ছিন্ন প্যাকেজগুলিতে।

উদাহরণস্বরূপ, একটি বিভক্ত APK একটি অতিরিক্ত বৈশিষ্ট্যের জন্য কোড এবং সংস্থানগুলি অন্তর্ভুক্ত করতে পারে যা শুধুমাত্র আপনার কয়েকজন ব্যবহারকারীর প্রয়োজন, যখন অন্য একটি বিভক্ত APK শুধুমাত্র একটি নির্দিষ্ট ভাষা বা স্ক্রীন ঘনত্বের জন্য সংস্থানগুলি অন্তর্ভুক্ত করে৷ এই বিভক্ত APKগুলির প্রতিটি ডাউনলোড এবং ইনস্টল করা হয় যখন ব্যবহারকারী এটির অনুরোধ করে বা এটি ডিভাইসের প্রয়োজন হয়।

নিম্নলিখিতটি আপনার সম্পূর্ণ অ্যাপ অভিজ্ঞতা তৈরি করতে একটি ডিভাইসে একসাথে ইনস্টল করা হতে পারে এমন বিভিন্ন ধরনের APK বর্ণনা করে। আপনি এই পৃষ্ঠায় পরবর্তী বিভাগে এই APKগুলিকে সমর্থন করার জন্য আপনার অ্যাপ প্রকল্পকে কীভাবে কনফিগার করবেন তা শিখবেন।

  • বেস APK: এই APK-এ কোড এবং সংস্থান রয়েছে যা অন্য সমস্ত বিভক্ত APK অ্যাক্সেস করতে পারে এবং আপনার অ্যাপের জন্য মৌলিক কার্যকারিতা প্রদান করে। যখন একজন ব্যবহারকারী আপনার অ্যাপ ডাউনলোড করার অনুরোধ করেন, তখন এই APKটি প্রথমে ডাউনলোড এবং ইনস্টল করা হয়। কারণ শুধুমাত্র বেস APK-এর ম্যানিফেস্টে আপনার অ্যাপের পরিষেবা, বিষয়বস্তু প্রদানকারী, অনুমতি, প্ল্যাটফর্ম সংস্করণের প্রয়োজনীয়তা এবং সিস্টেম বৈশিষ্ট্যের উপর নির্ভরতার সম্পূর্ণ ঘোষণা রয়েছে। Google Play আপনার প্রোজেক্টের অ্যাপ (বা বেস) মডিউল থেকে আপনার অ্যাপের জন্য বেস APK তৈরি করে। আপনি যদি আপনার অ্যাপের প্রাথমিক ডাউনলোডের আকার কমানোর বিষয়ে উদ্বিগ্ন হন, তাহলে মনে রাখা গুরুত্বপূর্ণ যে এই মডিউলে অন্তর্ভুক্ত সমস্ত কোড এবং সংস্থানগুলি আপনার অ্যাপের বেস APK-তে অন্তর্ভুক্ত করা হয়েছে।
  • কনফিগারেশন APK: এই APKগুলির প্রত্যেকটিতে একটি নির্দিষ্ট স্ক্রিনের ঘনত্ব, CPU আর্কিটেকচার বা ভাষার জন্য নেটিভ লাইব্রেরি এবং সংস্থান রয়েছে। যখন একজন ব্যবহারকারী আপনার অ্যাপ ডাউনলোড করেন, তখন তাদের ডিভাইস শুধুমাত্র কনফিগারেশন APK ডাউনলোড এবং ইনস্টল করে যা তাদের ডিভাইসকে লক্ষ্য করে। প্রতিটি কনফিগারেশন APK হয় একটি বেস APK বা বৈশিষ্ট্য মডিউল APK এর নির্ভরতা। অর্থাৎ, তারা যে APK এর জন্য কোড এবং সংস্থান প্রদান করে তার সাথে এগুলি ডাউনলোড এবং ইনস্টল করা হয়। বেস এবং বৈশিষ্ট্য মডিউলগুলির বিপরীতে, আপনি কনফিগারেশন APKগুলির জন্য একটি পৃথক মডিউল তৈরি করবেন না। আপনি যদি আপনার বেস এবং বৈশিষ্ট্য মডিউলগুলির জন্য বিকল্প, কনফিগারেশন-নির্দিষ্ট সংস্থানগুলিকে সংগঠিত করতে মানক অনুশীলনগুলি ব্যবহার করেন তবে Google Play আপনার জন্য স্বয়ংক্রিয়ভাবে কনফিগারেশন APK তৈরি করে
  • বৈশিষ্ট্য মডিউল APKs: এই APK গুলির প্রত্যেকটিতে আপনার অ্যাপের একটি বৈশিষ্ট্যের জন্য কোড এবং সংস্থান রয়েছে যা আপনি বৈশিষ্ট্য মডিউল ব্যবহার করে মডুলারাইজ করেন। তারপরে আপনি কীভাবে এবং কখন সেই বৈশিষ্ট্যটি একটি ডিভাইসে ডাউনলোড করা হবে তা কাস্টমাইজ করতে পারেন। উদাহরণস্বরূপ, প্লে কোর লাইব্রেরি ব্যবহার করে , ব্যবহারকারীকে অতিরিক্ত কার্যকারিতা প্রদানের জন্য ডিভাইসে বেস APK ইনস্টল করার পরে বৈশিষ্ট্যগুলি চাহিদা অনুযায়ী ইনস্টল করা হতে পারে। একটি চ্যাট অ্যাপের কথা বিবেচনা করুন যেটি শুধুমাত্র যখন ব্যবহারকারী সেই কার্যকারিতা ব্যবহার করার অনুরোধ করে তখনই ফটো ক্যাপচার এবং পাঠানোর ক্ষমতা ডাউনলোড এবং ইনস্টল করে। যেহেতু বৈশিষ্ট্য মডিউলগুলি ইনস্টল করার সময় উপলব্ধ নাও হতে পারে, আপনার বেস APK-এ যেকোনো সাধারণ কোড এবং সংস্থান অন্তর্ভুক্ত করা উচিত। অর্থাৎ, আপনার বৈশিষ্ট্য মডিউলটি অনুমান করা উচিত যে শুধুমাত্র বেস APK-এর কোড এবং সংস্থান ইনস্টলের সময় উপলব্ধ। Google Play আপনার প্রকল্পের বৈশিষ্ট্য মডিউল থেকে আপনার অ্যাপের জন্য বৈশিষ্ট্য মডিউল APK তৈরি করে।

তিনটি বৈশিষ্ট্য মডিউল এবং একাধিক ডিভাইস কনফিগারেশনের জন্য সমর্থন সহ একটি অ্যাপ বিবেচনা করুন। নীচের চিত্র 1 অ্যাপের বিভিন্ন APKগুলির জন্য নির্ভরতা গাছটি কেমন হতে পারে তা চিত্রিত করে৷ মনে রাখবেন যে বেস APK গাছের মাথা তৈরি করে, এবং অন্যান্য সমস্ত APK বেস APK-এর উপর নির্ভর করে। (আপনি যদি এই APKগুলির জন্য মডিউলগুলিকে একটি অ্যান্ড্রয়েড অ্যাপ বান্ডেলে উপস্থাপন করা হয় সে সম্পর্কে জানতে আগ্রহী হন, তাহলে Android অ্যাপ বান্ডেল ফর্ম্যাট দেখুন৷)

বেস APKটি গাছের মাথায় রয়েছে বৈশিষ্ট্য মডিউল APKগুলির উপর নির্ভরশীলতা রয়েছে৷ কনফিগারেশন APK, যার মধ্যে ডিভাইস কনফিগারেশন-নির্দিষ্ট কোড এবং বেস এবং প্রতিটি বৈশিষ্ট্য মডিউল APK-এর জন্য সংস্থান রয়েছে, নির্ভরতা গাছের পাতার নোড গঠন করে।

চিত্র 1. বিভক্ত APK ব্যবহার করে পরিবেশিত একটি অ্যাপের জন্য নির্ভরতা গাছ

মনে রাখবেন, আপনাকে এই APKগুলি নিজে তৈরি করতে হবে না—Google Play আপনার জন্য Android স্টুডিওর সাথে তৈরি করা একটি একক স্বাক্ষরিত অ্যাপ বান্ডেল ব্যবহার করে এটি করে। অ্যাপ বান্ডেল ফর্ম্যাট এবং কীভাবে একটি তৈরি করবেন সে সম্পর্কে আরও জানতে, Android অ্যাপ বান্ডেল তৈরি, স্থাপন এবং আপলোড করুন- এ যান।

Android 4.4 (API লেভেল 19) এবং তার নিচের ডিভাইসে চলমান

যেহেতু Android 4.4 (API লেভেল 19) এবং তার নিচের ডিভাইসগুলি স্প্লিট APK ডাউনলোড এবং ইনস্টল করা সমর্থন করে না, তাই Google Play সেই ডিভাইসগুলিকে একটি একক APK পরিবেশন করে, যাকে মাল্টি-এপিকে বলা হয়, যা ডিভাইসের কনফিগারেশনের জন্য অপ্টিমাইজ করা হয়েছে। অর্থাৎ, মাল্টি-এপিকেগুলি আপনার সম্পূর্ণ অ্যাপ অভিজ্ঞতার প্রতিনিধিত্ব করে কিন্তু অপ্রয়োজনীয় কোড এবং সংস্থানগুলি অন্তর্ভুক্ত করে না—যেমন অন্যান্য স্ক্রিন ঘনত্ব এবং CPU আর্কিটেকচারের জন্য।

যাইহোক, তারা আপনার অ্যাপ সমর্থন করে এমন সমস্ত ভাষার জন্য সংস্থান অন্তর্ভুক্ত করে। এটি, উদাহরণস্বরূপ, ব্যবহারকারীদের একটি ভিন্ন মাল্টি-এপিকে ডাউনলোড না করেই আপনার অ্যাপের পছন্দের ভাষা সেটিং পরিবর্তন করতে দেয়৷

মাল্টি-এপিকে পরে চাহিদা অনুযায়ী বৈশিষ্ট্য মডিউল ডাউনলোড করার ক্ষমতা নেই। এই APK-এ একটি বৈশিষ্ট্য মডিউল অন্তর্ভুক্ত করতে, আপনাকে অবশ্যই অন-ডিমান্ড অক্ষম করতে হবে অথবা বৈশিষ্ট্য মডিউল তৈরি করার সময় ফিউজিং সক্ষম করতে হবে।

মনে রাখবেন, অ্যাপ বান্ডেলের সাথে, আপনার অ্যাপ সমর্থন করে এমন প্রতিটি ডিভাইস কনফিগারেশনের জন্য আপনাকে APK তৈরি, সাইন, আপলোড এবং পরিচালনা করতে হবে না। আপনি এখনও আপনার সম্পূর্ণ অ্যাপের জন্য শুধুমাত্র একটি অ্যাপ বান্ডিল তৈরি এবং আপলোড করেন এবং Google Play আপনার জন্য বাকিটির যত্ন নেয়। সুতরাং আপনি অ্যান্ড্রয়েড 4.4 বা তার চেয়ে কম চলমান ডিভাইসগুলিকে সমর্থন করার পরিকল্পনা করুন বা না করুন, Google Play আপনার এবং আপনার ব্যবহারকারীদের উভয়ের জন্য একটি নমনীয় পরিবেশন প্রক্রিয়া সরবরাহ করে।

ব্যবহারকারীর ভাষা পরিবর্তন

অ্যাপ বান্ডেলের সাহায্যে, ডিভাইসগুলি শুধুমাত্র কোড এবং সংস্থানগুলি ডাউনলোড করে যা তাদের আপনার অ্যাপ চালানোর জন্য প্রয়োজন। সুতরাং, ভাষা সম্পদের জন্য, একজন ব্যবহারকারীর ডিভাইস শুধুমাত্র আপনার অ্যাপের ভাষা সম্পদ ডাউনলোড করে যা ডিভাইসের সেটিংসে বর্তমানে নির্বাচিত এক বা একাধিক ভাষার সাথে মেলে।

যখন কোনও ব্যবহারকারী ডিভাইস সেটিংসে তাদের ভাষা পরিবর্তন করেন, তখন অ্যাপটি নতুন ভাষায় প্রদর্শিত হওয়ার আগে Google Play-কে কিছু অতিরিক্ত স্প্লিট APK ডাউনলোড এবং ইনস্টল করতে হতে পারে।

Google Play সুইচের পরপরই অতিরিক্ত ভাষা ডাউনলোড করার চেষ্টা করে। যদি ব্যবহারকারীর ডিভাইসটি অফলাইনে থাকে, ডাউনলোড ব্যর্থ হয়, বা সংস্থানগুলি খুব বড় হয়, ডিভাইসের অবস্থা আরও অনুকূল হলে Google Play ব্যাকগ্রাউন্ডে আবার ডাউনলোড করার চেষ্টা করে। Android 9.0 (API লেভেল 28) বা তার নিচের কোনো ডিভাইসে চলার সময়, নতুন ভাষা বিভক্ত APK ইনস্টল করার সময় আপনার অ্যাপ যদি অগ্রভাগে থাকে, তাহলে অ্যাপটি বন্ধ হয়ে যাবে।

যদি আপনার অ্যাপের প্রয়োজন হয় যেকোন সময় ডিভাইসে সব ভাষা উপলব্ধ থাকা, আপনি আপনার বিল্ড কনফিগারেশনে ভাষা বিভাজন অক্ষম করতে পারেন।

আপনার অ্যাপের যদি ডিভাইস সেটিংসে নির্বাচিত ব্যবহারকারীর ভাষা থেকে স্বাধীনভাবে অতিরিক্ত ভাষা ডাউনলোড করার প্রয়োজন হয়—উদাহরণস্বরূপ একটি ইন-অ্যাপ ল্যাঙ্গুয়েজ পিকার প্রয়োগ করার জন্য—আপনি চাহিদা অনুযায়ী সেগুলি ডাউনলোড করতে প্লে কোর লাইব্রেরি ব্যবহার করতে পারেন।