Historically, Android has only supported 4 KB memory page sizes, which has optimized system memory performance for the average amount of total memory that Android devices have typically had. Beginning with Android 15, AOSP supports devices that are configured to use a page size of 16 KB (16 KB devices). If your app uses any NDK libraries, either directly or indirectly through an SDK, then you will need to rebuild your app for it to work on these 16 KB devices.
As device manufacturers continue to build devices with larger amounts of physical memory (RAM), many of these devices will adopt 16 KB (and eventually greater) page sizes to optimize the device's performance. Adding support for 16 KB page size devices enables your app to run on these devices and helps your app benefit from the associated performance improvements. Without recompiling, apps won't work on 16 KB devices in future Android releases.
To help you add support for your app, we've provided guidance on how to check if your app is impacted, how to rebuild your app (if applicable), and how to test your app in a 16 KB environment using emulators (including Android 15 system images for the Android Emulator).
সুবিধা এবং কর্মক্ষমতা বৃদ্ধি
16 KB পৃষ্ঠার আকারের সাথে কনফিগার করা ডিভাইসগুলি গড়ে সামান্য বেশি মেমরি ব্যবহার করে, তবে সিস্টেম এবং অ্যাপ উভয়ের জন্য বিভিন্ন কর্মক্ষমতা উন্নতিও লাভ করে:
- সিস্টেম মেমরির চাপে থাকাকালীন অ্যাপ লঞ্চের সময় কম: গড়ে 3.16% কম, কিছু অ্যাপের জন্য আরও উল্লেখযোগ্য উন্নতি (30% পর্যন্ত) যা আমরা পরীক্ষা করেছি
- অ্যাপ লঞ্চের সময় পাওয়ার ড্র কম হয়েছে: গড়ে 4.56% হ্রাস
- দ্রুত ক্যামেরা লঞ্চ: গড়ে 4.48% দ্রুত গরম শুরু হয় এবং গড়ে 6.60% দ্রুত ঠান্ডা শুরু হয়
- উন্নত সিস্টেম বুট সময়: গড়ে 8% (প্রায় 950 মিলিসেকেন্ড) দ্বারা উন্নত
এই উন্নতিগুলি আমাদের প্রাথমিক পরীক্ষার উপর ভিত্তি করে করা হয়েছে এবং প্রকৃত ডিভাইসগুলির ফলাফলগুলি সম্ভবত আলাদা হতে পারে৷ আমরা আমাদের পরীক্ষা চালিয়ে যাওয়ার সাথে সাথে অ্যাপগুলির সম্ভাব্য লাভের অতিরিক্ত বিশ্লেষণ প্রদান করব।
আপনার অ্যাপটি প্রভাবিত হয়েছে কিনা তা পরীক্ষা করুন।
If your app uses any native code, then you should rebuild your app with support for 16 KB devices. If you are unsure if your app uses native code, you can use the APK Analyzer to identify whether any native code is present and then check the alignment of ELF segments for any shared libraries that you find. Android Studio also provides features that help you to automatically detect alignment issues.
If your app only uses code written in the Java programming language or in Kotlin, including all libraries or SDKs, then your app already supports 16 KB devices. Nevertheless, we recommend that you test your app in a 16 KB environment to verify that there are no unexpected regressions in app behavior.
আপনার অ্যাপ কি নেটিভ কোড ব্যবহার করে?
যদি নিম্নলিখিতগুলির মধ্যে কোনোটি প্রযোজ্য হয়, তাহলে আপনার অ্যাপটি নেটিভ কোড ব্যবহার করে:
- আপনার অ্যাপ যেকোনো C/C++ (নেটিভ) কোড ব্যবহার করে। যদি আপনার অ্যাপ অ্যান্ড্রয়েড এনডিকে (Android NDK) ব্যবহার করে, তাহলে আপনার অ্যাপ নেটিভ কোড ব্যবহার করে।
- আপনার অ্যাপটি এমন যেকোনো থার্ড-পার্টি নেটিভ লাইব্রেরি বা ডিপেন্ডেন্সি (যেমন এসডিকে)-এর সাথে লিঙ্ক করে, যেগুলো সেগুলো ব্যবহার করে।
- আপনার অ্যাপটি একটি থার্ড-পার্টি অ্যাপ বিল্ডার দ্বারা তৈরি, যা ডিভাইসের নেটিভ লাইব্রেরি ব্যবহার করে।
APK অ্যানালাইজার ব্যবহার করে নেটিভ লাইব্রেরি শনাক্ত করুন
এপিকে অ্যানালাইজার এমন একটি টুল যা দিয়ে একটি তৈরি করা এপিকে-র বিভিন্ন দিক মূল্যায়ন করা যায়। আপনার অ্যাপটি নেটিভ কোড ব্যবহার করছে কিনা তা পরীক্ষা করতে (সেটি ১৬ কেবি-র সাথে সামঞ্জস্যপূর্ণ হোক বা না হোক):
- অ্যান্ড্রয়েড স্টুডিও খুলুন, তারপর ফাইল > ওপেন-এ ক্লিক করুন এবং যেকোনো একটি প্রজেক্ট বেছে নিন।
মেনু বার থেকে, Build > Analyze APK... এ ক্লিক করুন।

যে APK-টি আপনি বিশ্লেষণ করতে চান, সেটি বেছে নিন।
libফোল্ডারের ভেতরে দেখুন, যেখানে কোনো শেয়ার্ড অবজেক্ট (.so) ফাইল থাকলে সেগুলো থাকে। যদি কোনো শেয়ার্ড অবজেক্ট ফাইল থাকে, তাহলে আপনার অ্যাপ নেটিভ কোড ব্যবহার করে। অ্যালাইনমেন্ট কলামে সেইসব ফাইলের জন্য সতর্কবার্তা দেখানো হয় যেগুলোতে অ্যালাইনমেন্টের সমস্যা আছে। যদি কোনো শেয়ার্ড অবজেক্ট ফাইল না থাকে অথবাlibফোল্ডার না থাকে, তাহলে আপনার অ্যাপ নেটিভ কোড ব্যবহার করে না।
স্বয়ংক্রিয় চেকের মাধ্যমে অ্যালাইনমেন্টের সমস্যা সনাক্ত করুন
আপনার প্রি-বিল্ট লাইব্রেরি বা APK-গুলো ১৬ KB-এর কম সাইজের না হলে Android Studio আপনাকে আগে থেকেই সতর্ক করে দেয়। কোন লাইব্রেরিগুলো আপডেট করা প্রয়োজন বা কোডে কোনো পরিবর্তনের দরকার আছে কিনা, তা পর্যালোচনা করতে APK Analyzer টুলটি ব্যবহার করুন।

অ্যান্ড্রয়েড স্টুডিওর লিন্ট সেইসব নেটিভ লাইব্রেরিগুলোকেও হাইলাইট করে যেগুলো ১৬ কেবি অ্যালাইনড নয়।

শেয়ার করা লাইব্রেরিগুলির জন্য ELF সেগমেন্টগুলির অ্যালাইনমেন্ট পরীক্ষা করুন।
যেকোনো শেয়ার্ড লাইব্রেরির ক্ষেত্রে, ১৬ কেবি ইএলএফ অ্যালাইনমেন্ট ব্যবহার করে যাচাই করুন যে সেগুলোর ইএলএফ সেগমেন্টগুলো সঠিকভাবে অ্যালাইন করা আছে। আপনি যদি লিনাক্স বা ম্যাকওএস-এ ডেভেলপ করেন, তাহলে পরবর্তী বিভাগে বর্ণিত check_elf_alignment.sh স্ক্রিপ্টটি ব্যবহার করতে পারেন। এছাড়া আপনি সরাসরি কমান্ড-লাইন টুলগুলোও ব্যবহার করতে পারেন।
check_elf_alignment.sh স্ক্রিপ্টটি ব্যবহার করুন (লিনাক্স বা ম্যাকওএস)
check_elf_alignment.sh স্ক্রিপ্টটি ব্যবহার করে ELF সেগমেন্টগুলির অ্যালাইনমেন্ট পরীক্ষা করতে এই ধাপগুলি অনুসরণ করুন:
check_elf_alignment.shস্ক্রিপ্টটি একটি ফাইলে সংরক্ষণ করুন।আপনার অ্যাপের APK ফাইলে স্ক্রিপ্টটি চালান:
check_elf_alignment.sh APK_NAME.apkস্ক্রিপ্টটি
arm64-v8aসমস্ত শেয়ার্ড লাইব্রেরির জন্যALIGNEDঅথবাUNALIGNEDআউটপুট দেয়।যদি কোনো
arm64-v8aবাx86_64শেয়ার্ড লাইব্রেরিUNALIGNEDথাকে, তাহলে আপনাকে সেই লাইব্রেরিগুলোর প্যাকেজিং আপডেট করতে হবে, তারপর এই বিভাগের ধাপগুলো অনুসরণ করে আপনার অ্যাপটি পুনরায় কম্পাইল ও পরীক্ষা করতে হবে।
সরাসরি কমান্ড-লাইন টুল ব্যবহার করুন
সরাসরি কমান্ড-লাইন টুল ব্যবহার করে ELF সেগমেন্টের অ্যালাইনমেন্ট পরীক্ষা করতে এই ধাপগুলো অনুসরণ করুন:
- Android Studio-এর SDK Manager অথবা
sdkmanagerকমান্ড-লাইন টুল ব্যবহার করে নিশ্চিত করুন যে Android SDK Build-Tools ভার্সন 35.0.0 বা তার চেয়ে উচ্চতর এবং Android NDK উভয়ই ইনস্টল করা আছে। আপনার অ্যাপের APK ফাইলটি এক্সট্র্যাক্ট করুন:
লিনাক্স বা ম্যাকওএস
unzip APK_NAME.apk -d /tmp/my_apk_outউইন্ডোজ (পাওয়ারশেল)
Expand-Archive -Path .\APK_NAME.apk -DestinationPath ~\tmp\my_apk_outআপনি আপনার APK ফাইলটি যে টেম্পোরারি ডিরেক্টরিতে এক্সট্র্যাক্ট করেছেন, সেখানকার
libডিরেক্টরিতে শেয়ার্ড অবজেক্ট (.so) ফাইলগুলো খুঁজুন। APK Analyzer ব্যবহার করে নেটিভ লাইব্রেরি শনাক্ত করার সময় আপনি যে শেয়ার্ড অবজেক্ট ফাইলগুলো দেখেছিলেন, এগুলো ঠিক সেই ফাইলগুলোই। প্রতিটি শেয়ার্ড অবজেক্ট ফাইলের উপর নিম্নলিখিত কমান্ডটি চালান:লিনাক্স বা ম্যাকওএস
SDK_ROOT_LOCATION/Android/sdk/ndk/NDK_VERSION/toolchains/llvm/prebuilt/darwin-x86_64/bin/llvm-objdump -p SHARED_OBJECT_FILE.so | grep LOADউইন্ডোজ (পাওয়ারশেল)
SDK_ROOT_LOCATION\Android\sdk\ndk\NDK_VERSION\toolchains\llvm\prebuilt\windows-x86_64\bin\llvm-objdump.exe -p SHARED_OBJECT_FILE.so | Select-String -Pattern "LOAD"এখানে
SDK_ROOT_LOCATIONহলো সেই ডিরেক্টরির পাথ যেখানে আপনি অ্যান্ড্রয়েড SDK ইনস্টল করেছেন,SHARED_OBJECT_FILEহলো সেই শেয়ার্ড অবজেক্ট ফাইলের নাম যা আপনি পরীক্ষা করছেন, এবংNDK_VERSIONহলো আপনার ইনস্টল করা অ্যান্ড্রয়েড NDK-এর ভার্সন (উদাহরণস্বরূপ,28.0.12433566)। আপনার পরীক্ষা করা প্রতিটি ফাইলের জন্য আউটপুটটি নিচের মতো দেখাবে:LOAD off 0x0000000000000000 vaddr 0x0000000000000000 paddr 0x0000000000000000 align 2**14 LOAD off 0x0000000000042a90 vaddr 0x0000000000043a90 paddr 0x0000000000043a90 align 2**14 LOAD off 0x0000000000046230 vaddr 0x0000000000048230 paddr 0x0000000000048230 align 2**14আউটপুট লাইনগুলো পরীক্ষা করে নিশ্চিত করুন যে লোড সেগমেন্টগুলোর মান
2**14এর চেয়ে কম নয়। যদি কোনো লোড সেগমেন্টের মান2**13,2**12বা তার চেয়ে কম হয়, তাহলে আপনাকে সেই লাইব্রেরিগুলোর প্যাকেজিং আপডেট করতে হবে, তারপর এই বিভাগের ধাপগুলো অনুসরণ করে আপনার অ্যাপটি পুনরায় কম্পাইল ও পরীক্ষা করতে হবে।এরপরে, আপনার অ্যাপের APK ফাইলটিতে
zipalignকমান্ড-লাইন টুলটি চালান:লিনাক্স বা ম্যাকওএস
SDK_ROOT_LOCATION/Android/sdk/build-tools/35.0.0/zipalign -v -c -P 16 4 APK_NAME.apkউইন্ডোজ (পাওয়ারশেল)
SDK_ROOT_LOCATION\Android\sdk\build-tools\35.0.0\zipalign.exe -v -c -P 16 4 APK_NAME.apkএখানে
SDK_ROOT_LOCATIONহলো সেই ডিরেক্টরির পাথ যেখানে আপনি অ্যান্ড্রয়েড এসডিকে ইনস্টল করেছেন, এবংAPK_NAMEহলো আপনার অ্যাপের APK ফাইলের নাম। যদি সমস্ত শেয়ার্ড লাইব্রেরি সঠিকভাবে সাজানো থাকে, তাহলে আউটপুটের শেষ লাইনে "Verification successful" লেখা থাকবে।যদি যাচাইকরণ ব্যর্থ হয়, তাহলে কিছু শেয়ার্ড লাইব্রেরি পুনরায় বিন্যস্ত করার প্রয়োজন হবে। এজন্য আপনাকে সেই লাইব্রেরিগুলোর প্যাকেজিং আপডেট করতে হবে, তারপর এই বিভাগের ধাপগুলো অনুসরণ করে আপনার অ্যাপটি পুনরায় কম্পাইল ও পরীক্ষা করতে হবে।
১৬ কেবি ডিভাইস সমর্থন সহ আপনার অ্যাপ তৈরি করুন।
আপনার অ্যাপে যদি নেটিভ কোড ব্যবহার করা হয়, তাহলে অ্যাপটি যেন ১৬ কেবি ডিভাইস সাপোর্ট করে তা নিশ্চিত করতে নিম্নলিখিত বিভাগগুলিতে বর্ণিত ধাপগুলি সম্পূর্ণ করুন:
- আপনার শেয়ার করা লাইব্রেরিগুলোর প্যাকেজিং আপডেট করুন
- আপনার অ্যাপটি ১৬ কেবি ইএলএফ অ্যালাইনমেন্ট ব্যবহার করে কম্পাইল করুন।
- কোড ঠিক করুন এবং রানটাইম সমস্যা সমাধান করুন
- ১৬ কেবি সমর্থনের জন্য এসডিকেগুলো যাচাই করুন।
আপনার শেয়ার করা লাইব্রেরিগুলোর প্যাকেজিং আপডেট করুন
AGP সংস্করণ 8.5.1 বা উচ্চতর সংস্করণে আপগ্রেড করুন এবং অসংকুচিত শেয়ার্ড লাইব্রেরি ব্যবহার করুন।
জিপ অ্যালাইনমেন্ট যাচাই করতে bundletool ব্যবহার করুন
আপনার বান্ডেলের বিন্যাস দেখতে, ব্যবহার করুন:
bundletool dump config --bundle=<my .aab> | grep alignment
যদি আপনি PAGE_ALIGNMENT_16K দেখতে পান, তাহলে বুঝবেন আপনার বান্ডেলটি ১৬ কেবি জিপ অ্যালাইনমেন্ট চাইছে। যদি আপনি PAGE_ALIGNMENT_4K দেখতে পান, তবে এটি এই AAB থেকে তৈরি APK-কে নির্দেশ দেয় যেন জিপ ফাইলের মধ্যে ৪ কেবি অ্যালাইনমেন্টে থাকা .so ফাইলগুলো থাকে।
এজিপি সংস্করণ ৮.৫.১ বা উচ্চতর
১৬ কেবি ডিভাইসের জন্য, আনকম্প্রেসড শেয়ার্ড লাইব্রেরি সহ আসা অ্যাপগুলিকে একটি ১৬ কেবি জিপ-অ্যালাইনড বাউন্ডারিতে অ্যালাইন করতে হয়। এটি করার জন্য, আপনাকে অ্যান্ড্রয়েড গ্রেডল প্লাগইন (AGP) সংস্করণ ৮.৫.১ বা তার উচ্চতর সংস্করণে আপগ্রেড করতে হবে। আপগ্রেড প্রক্রিয়া সম্পর্কে বিস্তারিত জানতে অ্যান্ড্রয়েড গ্রেডল প্লাগইন আপগ্রেড অ্যাসিস্ট্যান্ট বিভাগটি দেখুন।
এজিপি সংস্করণ ৮.৫ বা তার কম
যদি আপনি AGP সংস্করণ 8.5.1 বা তার উচ্চতর সংস্করণে আপগ্রেড করতে না পারেন, তাহলে বিকল্প উপায় হলো কম্প্রেসড শেয়ার্ড লাইব্রেরি ব্যবহার করা। আপনার অ্যাপ প্যাকেজ করার সময় Gradle যাতে আপনার শেয়ার্ড লাইব্রেরিগুলো কম্প্রেস করে, সেজন্য আপনার Gradle কনফিগারেশন আপডেট করুন। এর ফলে আনঅ্যালাইনড শেয়ার্ড লাইব্রেরির কারণে অ্যাপ ইনস্টলেশনের সমস্যা এড়ানো যাবে।
গ্রুভি
আপনার build.gradle ফাইলে নিম্নলিখিত অপশনটি যোগ করুন:
android {
...
packagingOptions {
jniLibs {
useLegacyPackaging true
}
}
}
কোটলিন
আপনার build.gradle.kts ফাইলে নিম্নলিখিত অপশনটি যোগ করুন:
android {
...
packagingOptions {
jniLibs {
useLegacyPackaging = true
}
}
}
এজিপি সংস্করণ ৮.০ বা তার কম
আপনি যদি 8.0 বা তার চেয়ে কম AGP সংস্করণ ব্যবহার করেন, তাহলে আপনাকে আপনার gradle.properties ফাইলে App Bundles-এর জন্য uncompressed native library অপশনটিও নিষ্ক্রিয় করতে হবে:
android.bundle.enableUncompressedNativeLibs=false
আপনার অ্যাপটি ১৬ কেবি ইএলএফ অ্যালাইনমেন্ট ব্যবহার করে কম্পাইল করুন।
আপনার অ্যাপটি চালানোর জন্য, ১৬ কেবি ডিভাইসগুলোতে শেয়ার্ড লাইব্রেরির ELF সেগমেন্টগুলোকে ১৬ কেবি ELF অ্যালাইনমেন্ট ব্যবহার করে সঠিকভাবে সারিবদ্ধ করা প্রয়োজন।
গেম ডেভেলপারদের জন্য, যদি আপনার গেমটি ইউনিটি (Unity) গেম ইঞ্জিনের উপর ভিত্তি করে চলে, তাহলে ইউনিটি (Unity) গাইডটি দেখুন। যদি আপনার গেমটি আনরিয়েল (Unreal) গেম ইঞ্জিনের উপর ভিত্তি করে চলে, তাহলে আনরিয়েল (Unreal) গাইডটি দেখুন। নেটিভ গেম ইঞ্জিনগুলোর জন্য, এই গাইডটি অনুসরণ করতে থাকুন।
আপনার অ্যাপটি ১৬ কেবি ইএলএফ অ্যালাইনমেন্টে কম্পাইল করতে, আপনার ব্যবহৃত অ্যান্ড্রয়েড এনডিকে-র সংস্করণের উপর নির্ভর করে নিচের যেকোনো একটি বিভাগের ধাপগুলো সম্পূর্ণ করুন।
অ্যান্ড্রয়েড এনডিকে আর২৮ এবং উচ্চতর
NDK r28 এবং এর পরবর্তী সংস্করণগুলো ডিফল্টরূপে ১৬ কিলোবাইট-অ্যালাইনড কম্পাইল করে।
অ্যান্ড্রয়েড এনডিকে আর২৭
Android NDK সংস্করণ r27 এবং তার উচ্চতর সংস্করণে 16 KB-অ্যালাইনড শেয়ার্ড লাইব্রেরি কম্পাইল করা সমর্থন করার জন্য, আপনাকে আপনার ndk-build , build.gradle , build.gradle.kts , অথবা লিঙ্কার ফ্ল্যাগগুলি নিম্নরূপ আপডেট করতে হবে:
এনডিকে-বিল্ড
আপনার Application.mk তে:
APP_SUPPORT_FLEXIBLE_PAGE_SIZES := true
গ্রুভি
আপনার build.gradle ফাইলে, -DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON আর্গুমেন্টটি সেট করুন:
android {
...
defaultConfig {
...
// This block is different from the one you use to link Gradle
// to your CMake or ndk-build script.
externalNativeBuild {
// For ndk-build, instead use the ndkBuild block.
cmake {
// Passes optional arguments to CMake.
arguments "-DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON"
}
}
}
}
কোটলিন
আপনার build.gradle.kts ফাইলে, -DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON আর্গুমেন্টটি সেট করুন:
android {
...
defaultConfig {
...
// This block is different from the one you use to link Gradle
// to your CMake or ndk-build script.
externalNativeBuild {
// For ndk-build, instead use the ndkBuild block.
cmake {
// Passes optional arguments to CMake.
arguments += listOf("-DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON")
}
}
}
}
অন্যান্য বিল্ড সিস্টেম
নিম্নলিখিত লিঙ্কার ফ্ল্যাগগুলি নির্দিষ্ট করুন:
-Wl,-z,max-page-size=16384
অ্যান্ড্রয়েড এনডিকে আর২৬ এবং এর নিচের সংস্করণ
সর্বদা আপনার NDK আপডেট করুন। এটি শুধুমাত্র শেষ উপায় হিসেবে ব্যবহার করা উচিত এবং এক্ষেত্রে কোনো সহায়তার নিশ্চয়তা দেওয়া হয় না।
Android NDK সংস্করণ r26 বা তার নিম্নতর সংস্করণে 16 KB-অ্যালাইনড শেয়ার্ড লাইব্রেরি কম্পাইল করা সমর্থন করার জন্য, আপনাকে আপনার ndk-build অথবা cmake কনফিগারেশন নিম্নরূপভাবে আপডেট করতে হবে:
এনডিকে-বিল্ড
১৬ কেবি ইএলএফ অ্যালাইনমেন্ট সক্রিয় করতে আপনার Android.mk আপডেট করুন:
LOCAL_LDFLAGS += "-Wl,-z,max-page-size=16384"
CMake
১৬ কেবি ইএলএফ অ্যালাইনমেন্ট সক্রিয় করতে আপনার CMakeLists.txt আপডেট করুন:
target_link_options(${CMAKE_PROJECT_NAME} PRIVATE "-Wl,-z,max-page-size=16384")
অ্যান্ড্রয়েড এনডিকে আর২২ এবং এর পূর্ববর্তী সংস্করণগুলো সামঞ্জস্যপূর্ণ নয়।
সর্বদা আপনার NDK আপডেট করুন। এটি শুধুমাত্র শেষ উপায় হিসেবে ব্যবহার করা উচিত এবং এক্ষেত্রে কোনো সহায়তার নিশ্চয়তা দেওয়া হয় না।
NDK r26 এবং এর নিচের সংস্করণগুলোর জন্য গৃহীত পদক্ষেপগুলোর পাশাপাশি, common-page-size=16384 পুরোনো GNU ld এবং LLVM lld লিঙ্কারগুলোর বাগ সমাধান করা যেতে পারে। এটি কেবল তখনই কাজ করে, যদি ELF ফাইলটিতে একটি .relro_padding সেকশনও উপস্থিত থাকে। এটি লিঙ্কারের সংস্করণ এবং নির্দিষ্ট প্রোগ্রামটির উপর নির্ভর করে। এই NDK সংস্করণগুলোর জন্য কোনো সাপোর্ট নেই, এবং যদি এটি কাজ না করে, তবে কোনো সমস্যা জানানোর আগে NDK সংস্করণটি আপডেট করে নিন।
কোড ঠিক করুন এবং রানটাইম সমস্যা সমাধান করুন
আপনার অ্যাপটি ১৬ কেবি-অ্যালাইনড হলেও, কোডের কোনো অংশে যদি ধরে নেওয়া হয় যে ডিভাইসটি একটি নির্দিষ্ট পেজ সাইজ ব্যবহার করছে, তাহলে আপনার অ্যাপে ত্রুটি দেখা দিতে পারে। এটি এড়ানোর জন্য, নিম্নলিখিত ধাপগুলো সম্পন্ন করুন:
আপনার কোড লজিকে থাকা
PAGE_SIZEকনস্ট্যান্টকে নির্দেশ করে এমন যেকোনো হার্ড-কোডেড নির্ভরতা অথবা ডিভাইসের পেজ সাইজ 4 KB (4096) ধরে নেওয়া অংশগুলো সরিয়ে ফেলুন।এর পরিবর্তে
getpagesize()বাsysconf(_SC_PAGESIZE)ব্যবহার করুন।mmap()এবং অন্যান্য API-এর এমন ব্যবহারগুলো খুঁজুন যেগুলোতে পেজ-অ্যালাইনড আর্গুমেন্টের প্রয়োজন হয় এবং প্রয়োজনে বিকল্প দিয়ে প্রতিস্থাপন করুন।
কিছু ক্ষেত্রে, যদি আপনার অ্যাপ PAGE_SIZE একটি সুবিধাজনক মান হিসেবে ব্যবহার করে যা অন্তর্নিহিত পেজ সাইজের সাথে আবদ্ধ নয়, তাহলে ১৬ KB মোডে এটি ব্যবহার করা হলে আপনার অ্যাপটি ভেঙে যাবে না। তবে, যদি এই মানটি MAP_FIXED ছাড়া mmap মাধ্যমে কার্নেলে পাঠানো হয়, তাহলে কার্নেল একটি সম্পূর্ণ পেজ ব্যবহার করে, যা কিছু মেমরি অপচয় করে। এইসব কারণে, NDK r27 এবং তার পরবর্তী সংস্করণগুলিতে ১৬ KB মোড সক্রিয় করা হলে PAGE_SIZE অনির্ধারিত থাকে।
যদি আপনার অ্যাপ এইভাবে PAGE_SIZE ব্যবহার করে এবং এই মানটি সরাসরি কার্নেলে না পাঠায়, তাহলে PAGE_SIZE ব্যবহার না করে একটি নতুন নামে একটি নতুন ভেরিয়েবল তৈরি করুন। এর মাধ্যমে বোঝানো হবে যে এটি অন্য উদ্দেশ্যে ব্যবহৃত হচ্ছে এবং কোনো বাস্তব মেমরি পেজকে নির্দেশ করে না।
১৬ কেবি সমর্থনের জন্য এসডিকেগুলো যাচাই করুন।
অনেক SDK ১৬ KB পেজ সাইজের সাথে সামঞ্জস্যপূর্ণ, বিশেষ করে যদি আপনি নিজে সেগুলো বিল্ড করেন বা সাম্প্রতিক প্রি-বিল্ট সংস্করণ ব্যবহার করেন। তবে, যেহেতু কিছু SDK প্রি-বিল্ট বা সংস্করণ ১৬ KB-এর সাথে সামঞ্জস্যপূর্ণ নয়, তাই ১৬ KB-এর জন্য কোন সংস্করণটি ব্যবহার করতে হবে তা নির্ধারণ করতে প্রতিটি SDK প্রদানকারীর ওয়েবসাইট যাচাই করে দেখা উচিত।
আপনার অ্যাপটি একটি ১৬ কেবি পরিবেশে পরীক্ষা করুন।
১৬ কেবি ডিভাইস সমর্থনসহ আপনার অ্যাপটি তৈরি করার পরে, আপনার অ্যাপে কোনো রিগ্রেশন হচ্ছে কিনা তা দেখতে আপনি এটিকে একটি ১৬ কেবি পরিবেশে পরীক্ষা করতে চাইবেন। এটি করার জন্য, এই ধাপগুলো অনুসরণ করুন:
অ্যান্ড্রয়েড ১৫ এসডিকে বা উচ্চতর সংস্করণ সেট আপ করুন।
নিম্নলিখিত টেস্টিং পরিবেশগুলির মধ্যে একটি সেট আপ করুন:
আপনার টেস্ট ডিভাইসটি চালু করুন, তারপর এটি ১৬ কেবি এনভায়রনমেন্ট ব্যবহার করছে কিনা তা যাচাই করতে নিম্নলিখিত কমান্ডটি চালান:
adb shell getconf PAGE_SIZEকমান্ডটির রিটার্ন ভ্যালু হওয়া উচিত
16384।আপনার অ্যাপটি ১৬ কেবি-অ্যালাইনড কিনা তা যাচাই করতে নিম্নলিখিত
zipalignকমান্ডটি চালান, যেখানে APK_NAME হলো আপনার অ্যাপের APK ফাইলের নাম:zipalign -c -P 16 -v 4 APK_NAME.apkআপনার অ্যাপটি পুঙ্খানুপুঙ্খভাবে পরীক্ষা করুন, বিশেষ করে সেইসব অংশের উপর মনোযোগ দিন যেগুলো নির্দিষ্ট পেজ সাইজ উল্লেখকারী কোড পরিবর্তনের ফলে প্রভাবিত হতে পারে।
একটি ১৬-কেবি-ভিত্তিক সিস্টেম ইমেজ দিয়ে অ্যান্ড্রয়েড এমুলেটরটি সেট আপ করুন।
অ্যান্ড্রয়েড এমুলেটর ব্যবহার করে একটি ১৬ কেবি পরিবেশ তৈরি করতে, এই ধাপগুলো অনুসরণ করুন:
- অ্যান্ড্রয়েড স্টুডিওতে, টুলস > এসডিকে ম্যানেজার-এ ক্লিক করুন।
SDK Platforms ট্যাবে, Show Package Details চেক করুন, তারপর Android VanillaIceCream or higher সেকশনটি এক্সপ্যান্ড করুন এবং আপনি যে ভার্চুয়াল ডিভাইসগুলো তৈরি করতে চান তার উপর নির্ভর করে নিম্নলিখিত এমুলেটর সিস্টেম ইমেজগুলোর মধ্যে একটি বা উভয়টি সিলেক্ট করুন:
- গুগল এপিআই পরীক্ষামূলক ১৬ কেবি পেজ সাইজ এআরএম ৬৪ ভি৮এ সিস্টেম ইমেজ
- গুগল এপিআই পরীক্ষামূলক ১৬ কেবি পেজ সাইজ ইন্টেল x86_64 অ্যাটম সিস্টেম ইমেজ

আপনার নির্বাচিত সিস্টেম ইমেজগুলো ডাউনলোড করতে অ্যাপ্লাই > ওকে-তে ক্লিক করুন।
অ্যান্ড্রয়েড ১৫-এর জন্য একটি ভার্চুয়াল ডিভাইস সেট আপ করতে ধাপগুলো অনুসরণ করুন, এবং যখন সিস্টেম ইমেজ নির্বাচন করতে বলা হবে, তখন আপনার ডাউনলোড করা ১৬ কেবি সিস্টেম ইমেজটি নির্বাচন করুন। যদি এটি স্বয়ংক্রিয়ভাবে সুপারিশ করা না হয়, তবে আপনি 'Other Images' ট্যাবে ১৬ কেবি সিস্টেম ইমেজটি খুঁজে নিতে পারেন।

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

১৬ কেবি মোডে একটি ডিভাইস বুট করতে ১৬ কেবি পৃষ্ঠা আকারের ডেভেলপার বিকল্পটি টগল করুন।
অ্যান্ড্রয়েড ১৫ এর QPR সংস্করণগুলিতে, আপনি নির্দিষ্ট ডিভাইসে উপলব্ধ ডেভেলপার বিকল্পটি ব্যবহার করে ডিভাইসটিকে ১৬ KB মোডে বুট করতে এবং অন-ডিভাইস পরীক্ষা করতে পারেন। ডেভেলপার বিকল্পটি ব্যবহার করার আগে, সেটিংস > সিস্টেম > সফ্টওয়্যার আপডেটে যান এবং উপলব্ধ যেকোনো আপডেট প্রয়োগ করুন।
এই ডেভেলপার বিকল্পটি নিম্নলিখিত ডিভাইসগুলিতে উপলব্ধ:
Pixel 8 এবং 8 Pro (Android 15 QPR1 বা তার উচ্চতর ভার্সন সহ)
Pixel 8a (Android 15 QPR1 বা তার উচ্চতর ভার্সন সহ)
Pixel 9, 9 Pro, এবং 9 Pro XL (Android 15 QPR2 বা তার উচ্চতর ভার্সন সহ)
Pixel 9a (Android 16 বা তার উচ্চতর ভার্সন সহ)
১৬ কেবি ব্যাককম্প্যাট মোড

পেজ সাইজ কম্প্যাটিবিলিটি মোডে সতর্কতা
যখন কোনো ডিভাইস ১৬ কেবি কার্নেল দিয়ে চলে, তখন ১৬ কেবি ব্যাককম্প্যাট অপশনটি পাওয়া যায়। নিম্নলিখিত শর্তগুলো পূরণ হলে প্যাকেজ ম্যানেজার একটি অ্যাপকে ১৬ কেবি ব্যাককম্প্যাট মোডে চালায়:
- যদি অ্যাপটিতে
.soএক্সটেনশনযুক্ত ELF ফাইল থাকে এবং সেগুলোর লোড সেগমেন্ট অ্যালাইনমেন্ট ৪ কিলোবাইট হয়। - যদি জিপ করা APK-টিতে ৪ কিলোবাইট আকারের, জিপ অ্যালাইনড ও অসংকুচিত ELF ফাইল থাকে।
যদি প্যাকেজ ম্যানেজার কোনো অ্যাপের জন্য ১৬ কেবি ব্যাককম্প্যাট মোড সক্রিয় করে থাকে, তাহলে অ্যাপটি প্রথমবার চালু করার সময় একটি সতর্কবার্তা প্রদর্শন করে যে এটি ১৬ কেবি ব্যাককম্প্যাট মোডে চলছে।
১৬ কেবি ব্যাককম্প্যাট মোড কিছু অ্যাপকে কাজ করতে দেয়, কিন্তু সর্বোত্তম নির্ভরযোগ্যতা এবং স্থিতিশীলতার জন্য অ্যাপগুলো ১৬ কেবি অ্যালাইনড হওয়াই উচিত।
অ্যাপ ইনফো পেজে, অ্যাডভান্সড-এর অধীনে, নির্দিষ্ট অ্যাপের জন্য ১৬ কেবি ব্যাককম্প্যাট মোড চালু বা বন্ধ করতে ‘Run app with page size compat mode’ সেটিংটি টগল করুন। এই সেটিংটি শুধুমাত্র তখনই দেখা যাবে যখন ডিভাইসটি ১৬ কেবি পেজ সাইজে চলবে।

পৃষ্ঠার আকার সামঞ্জস্য মোড সেটিং
ডিভাইসের প্রতিটি অ্যাপের জন্য ১৬ কেবি ব্যাককম্প্যাট বাধ্যতামূলকভাবে চালু করতে:
adb shell setprop bionic.linker.16kb.app_compat.enabled true
adb shell setprop pm.16kb.app_compat.disabled false
ডিভাইসের প্রতিটি অ্যাপের জন্য ১৬ কেবি ব্যাককম্প্যাট জোর করে বন্ধ করতে:
adb shell setprop bionic.linker.16kb.app_compat.enabled false
adb shell setprop pm.16kb.app_compat.disabled true
অ্যান্ড্রয়েড ১৭-এ, আপনি প্রতিটি অ্যাপের জন্য ১৬ কেবি ব্যাককম্প্যাট জোর করে বন্ধ করতে পারেন এবং যেকোনো বেমানান বাইনারিকে অবিলম্বে বন্ধ করে দিতে পারেন:
adb shell setprop bionic.linker.16kb.app_compat.enabled fatal
adb shell setprop pm.16kb.app_compat.disabled true
কোনো নির্দিষ্ট অ্যাপের AndroidManifest.xml ফাইলে android:pageSizeCompat প্রপার্টিটি enabled বা disabled-এ সেট করে সেটির জন্য ব্যাককম্প্যাট মোড চালু বা বন্ধ করা যায়। এই প্রপার্টিটি সেট করা থাকলে, অ্যাপটি চালু হওয়ার সময় ব্যাককম্প্যাট মোডের সতর্কবার্তা প্রদর্শন করবে না।
গুগল প্লে সামঞ্জস্যতার প্রয়োজনীয়তা
ডিভাইস নির্মাতারা পারফরম্যান্স অপ্টিমাইজ করার জন্য ডিভাইসগুলিতে আরও বেশি র্যাম যুক্ত করার ফলে, অনেকেই ১৬ কেবি-র মতো বড় পেজ সাইজ গ্রহণ করবে। এই আসন্ন ডিভাইসগুলির লঞ্চের জন্য প্রস্তুতি হিসেবে, গুগল প্লে একটি নতুন সামঞ্জস্যতার আবশ্যকতা চালু করছে: ১ নভেম্বর, ২০২৫ থেকে, গুগল প্লে-তে জমা দেওয়া সমস্ত নতুন অ্যাপ এবং বিদ্যমান অ্যাপের আপডেট, যা অ্যান্ড্রয়েড ১৫ (এপিআই লেভেল ৩৫) এবং তার উচ্চতর সংস্করণে চালিত ডিভাইসগুলির জন্য তৈরি, সেগুলিতে অবশ্যই ১৬ কেবি পেজ সাইজ সমর্থন করতে হবে।
এই সামঞ্জস্যের আবশ্যকতা সম্পর্কে আরও জানতে, এই ব্লগ পোস্টটি দেখুন।