ঐতিহাসিকভাবে, অ্যান্ড্রয়েড শুধুমাত্র 4 KB মেমরি পৃষ্ঠার আকার সমর্থন করে, যা অ্যান্ড্রয়েড ডিভাইসে সাধারণত থাকা মোট মেমরির গড় পরিমাণের জন্য সিস্টেম মেমরির কার্যকারিতা অপ্টিমাইজ করেছে। অ্যান্ড্রয়েড 15 দিয়ে শুরু করে, AOSP 16 KB (16 KB ডিভাইস) এর পৃষ্ঠার আকার ব্যবহার করার জন্য কনফিগার করা ডিভাইসগুলিকে সমর্থন করে। যদি আপনার অ্যাপটি SDK-এর মাধ্যমে প্রত্যক্ষ বা পরোক্ষভাবে কোনও NDK লাইব্রেরি ব্যবহার করে, তাহলে এই 16 KB ডিভাইসে কাজ করার জন্য আপনাকে আপনার অ্যাপটি পুনর্নির্মাণ করতে হবে।
যেহেতু ডিভাইস নির্মাতারা বৃহত্তর পরিমাণে ভৌত মেমরি (RAM) সহ ডিভাইসগুলি তৈরি করতে থাকে, এই ডিভাইসগুলির মধ্যে অনেকগুলি ডিভাইসের কার্যকারিতা অপ্টিমাইজ করার জন্য 16 KB (এবং শেষ পর্যন্ত আরও বড়) পৃষ্ঠার আকার গ্রহণ করবে। 16 KB পৃষ্ঠার আকারের ডিভাইসগুলির জন্য সমর্থন যোগ করা আপনার অ্যাপটিকে এই ডিভাইসগুলিতে চালানোর জন্য সক্ষম করে এবং আপনার অ্যাপটিকে সংশ্লিষ্ট কর্মক্ষমতা উন্নতি থেকে উপকৃত হতে সাহায্য করে। পুনরায় কম্পাইল না করে, অ্যাপগুলি 16 KB ডিভাইসে কাজ নাও করতে পারে যখন সেগুলি ভবিষ্যতের Android রিলিজে তৈরি করা হয়।
আপনার অ্যাপের জন্য সমর্থন যোগ করতে আপনাকে সাহায্য করার জন্য, আমরা কীভাবে আপনার অ্যাপটি প্রভাবিত হয়েছে কিনা তা পরীক্ষা করতে , কীভাবে আপনার অ্যাপটি পুনর্নির্মাণ করবেন (যদি প্রযোজ্য হয়), এবং কীভাবে এমুলেটর ব্যবহার করে (Android সহ) ব্যবহার করে আপনার অ্যাপটি 16 KB এনভায়রনমেন্টে পরীক্ষা করবেন সে সম্পর্কে নির্দেশিকা প্রদান করেছি। অ্যান্ড্রয়েড এমুলেটরের জন্য 15টি সিস্টেম চিত্র)।
সুবিধা এবং কর্মক্ষমতা লাভ
16 KB পৃষ্ঠার আকারের সাথে কনফিগার করা ডিভাইসগুলি গড়ে সামান্য বেশি মেমরি ব্যবহার করে, তবে সিস্টেম এবং অ্যাপ উভয়ের জন্য বিভিন্ন কর্মক্ষমতা উন্নতিও লাভ করে:
- সিস্টেম মেমরির চাপে থাকাকালীন অ্যাপ লঞ্চের সময় কম: গড়ে 3.16% কম, কিছু অ্যাপের জন্য আরও উল্লেখযোগ্য উন্নতি (30% পর্যন্ত) যা আমরা পরীক্ষা করেছি
- অ্যাপ লঞ্চের সময় পাওয়ার ড্র কম হয়েছে: গড়ে 4.56% হ্রাস
- দ্রুত ক্যামেরা লঞ্চ: গড়ে 4.48% দ্রুত গরম শুরু হয় এবং গড়ে 6.60% দ্রুত ঠান্ডা শুরু হয়
- উন্নত সিস্টেম বুট সময়: গড়ে 8% (প্রায় 950 মিলিসেকেন্ড) দ্বারা উন্নত
এই উন্নতিগুলি আমাদের প্রাথমিক পরীক্ষার উপর ভিত্তি করে করা হয়েছে এবং প্রকৃত ডিভাইসগুলির ফলাফলগুলি সম্ভবত আলাদা হতে পারে৷ আমরা আমাদের পরীক্ষা চালিয়ে যাওয়ার সাথে সাথে অ্যাপগুলির সম্ভাব্য লাভের অতিরিক্ত বিশ্লেষণ প্রদান করব।
আপনার অ্যাপ প্রভাবিত হয়েছে কিনা তা পরীক্ষা করুন
যদি আপনার অ্যাপ কোনো নেটিভ কোড ব্যবহার করে , তাহলে আপনার অ্যাপটিকে 16 KB ডিভাইসের জন্য সমর্থন সহ পুনর্নির্মাণ করা উচিত। যদি আপনি নিশ্চিত না হন যে আপনার অ্যাপটি নেটিভ কোড ব্যবহার করে, তাহলে আপনি APK বিশ্লেষক ব্যবহার করে সনাক্ত করতে পারেন যে কোনও নেটিভ কোড উপস্থিত আছে কিনা এবং তারপরে আপনি যে কোনও ভাগ করা লাইব্রেরির জন্য ELF বিভাগগুলির সারিবদ্ধতা পরীক্ষা করতে পারেন ।
যদি আপনার অ্যাপটি শুধুমাত্র জাভা প্রোগ্রামিং ভাষায় বা কোটলিনে লেখা কোড ব্যবহার করে, যার মধ্যে সব লাইব্রেরি বা SDK সহ, তাহলে আপনার অ্যাপটি ইতিমধ্যেই 16 KB ডিভাইস সমর্থন করে। তবুও, আমরা সুপারিশ করছি যে আপনি অ্যাপের আচরণে কোনো অপ্রত্যাশিত রিগ্রেশন নেই তা যাচাই করতে 16 KB পরিবেশে আপনার অ্যাপটি পরীক্ষা করুন ।
আপনার অ্যাপ কি নেটিভ কোড ব্যবহার করে?
আপনার অ্যাপটি নেটিভ কোড ব্যবহার করে যদি নিচের কোনটি প্রযোজ্য হয়:
- আপনার অ্যাপ যেকোনো C/C++ (নেটিভ) কোড ব্যবহার করে। আপনার অ্যাপ যদি Android NDK ব্যবহার করে, তাহলে আপনার অ্যাপটি নেটিভ কোড ব্যবহার করে।
- আপনার অ্যাপ যেকোন থার্ড-পার্টি নেটিভ লাইব্রেরি বা নির্ভরতা (যেমন SDK) এর সাথে লিঙ্ক করে যা সেগুলি ব্যবহার করে।
- আপনার অ্যাপটি একটি থার্ড-পার্টি অ্যাপ নির্মাতা দ্বারা তৈরি করা হয়েছে যেটি ডিভাইসে নেটিভ লাইব্রেরি ব্যবহার করে।
APK বিশ্লেষক ব্যবহার করে নেটিভ লাইব্রেরি সনাক্ত করুন
APK বিশ্লেষক একটি টুল যা আপনাকে একটি নির্মিত APK এর বিভিন্ন দিক মূল্যায়ন করতে দেয়। আপনার অ্যাপটি নেটিভ কোড ব্যবহার করে কিনা তা পরীক্ষা করতে (এটি 16 KB সামঞ্জস্যপূর্ণ কিনা)
- অ্যান্ড্রয়েড স্টুডিও খুলুন, তারপরে ফাইল > খুলুন ক্লিক করুন এবং যেকোনো প্রকল্প বেছে নিন।
মেনু বার থেকে, Build > Analyze APK... এ ক্লিক করুন।
আপনি যে APK বিশ্লেষণ করতে চান সেটি বেছে নিন।
lib
ফোল্ডারের মধ্যে দেখুন, যেটি শেয়ার করা অবজেক্ট (.so
) ফাইলগুলিকে হোস্ট করে যদি থাকে। কোনো শেয়ার করা অবজেক্ট ফাইল উপস্থিত থাকলে, আপনার অ্যাপ নেটিভ কোড ব্যবহার করে। যদি কোনো শেয়ার করা অবজেক্ট ফাইল না থাকে বা কোনোlib
ফোল্ডার না থাকে, তাহলে আপনার অ্যাপ নেটিভ কোড ব্যবহার করে না।
শেয়ার্ড লাইব্রেরির জন্য ELF সেগমেন্টের প্রান্তিককরণ পরীক্ষা করুন
যেকোনো শেয়ার করা লাইব্রেরির জন্য, যাচাই করুন যে শেয়ার করা লাইব্রেরির ELF সেগমেন্টগুলি 16 KB ELF অ্যালাইনমেন্ট ব্যবহার করে সঠিকভাবে সারিবদ্ধ হয়েছে। আপনি যদি Linux বা macOS-তে বিকাশ করছেন, তাহলে নিচের বিভাগে বর্ণিত check_elf_alignment.sh
স্ক্রিপ্টটি ব্যবহার করতে পারেন। আপনি সরাসরি কমান্ড-লাইন সরঞ্জামগুলিও ব্যবহার করতে পারেন।
check_elf_alignment.sh স্ক্রিপ্ট ব্যবহার করুন (Linux বা macOS)
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 স্টুডিওতে SDK ম্যানেজার বা
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 ফাইলটি বের করেছেন, শেয়ার করা অবজেক্ট (
.so
) ফাইলগুলির জন্যlib
ডিরেক্টরির বিষয়বস্তু পরীক্ষা করুন৷ এগুলি একই শেয়ার করা অবজেক্ট ফাইল যা আপনি APK অ্যানালাইজার ব্যবহার করে নেটিভ লাইব্রেরি শনাক্ত করার সময় দেখেছেন। প্রতিটি ভাগ করা বস্তু ফাইলে নিম্নলিখিত কমান্ড চালান:লিনাক্স বা ম্যাকোস
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
হল সেই ডিরেক্টরির পথ যেখানে আপনি Android SDK ইনস্টল করেছেন,SHARED_OBJECT_FILE
হল শেয়ার্ড অবজেক্ট ফাইলের নাম যা আপনি চেক করছেন এবংNDK_VERSION
হল Android 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
হল সেই ডিরেক্টরির পথ যেখানে আপনি Android SDK ইনস্টল করেছেন এবংAPK_NAME
হল আপনার অ্যাপের APK ফাইলের নাম৷ আউটপুটের শেষ লাইনটি বলবে "যাচাই সফল হয়েছে" যদি সমস্ত ভাগ করা লাইব্রেরি সঠিকভাবে সারিবদ্ধ থাকে।যাচাইকরণ ব্যর্থ হলে, কিছু ভাগ করা লাইব্রেরি পুনরায় সাজাতে হবে, তাই আপনাকে সেই লাইব্রেরির জন্য প্যাকেজিং আপডেট করতে হবে, তারপর আপনার অ্যাপটি পুনরায় কম্পাইল করুন এবং এই বিভাগে পদক্ষেপগুলি অনুসরণ করে পুনরায় পরীক্ষা করুন৷
16 KB ডিভাইসের জন্য সমর্থন সহ আপনার অ্যাপ তৈরি করুন
যদি আপনার অ্যাপটি নেটিভ কোড ব্যবহার করে, তাহলে আপনার অ্যাপটি 16 KB ডিভাইস সমর্থন করে কিনা তা নিশ্চিত করতে নিম্নলিখিত বিভাগে বর্ণিত ধাপগুলি সম্পূর্ণ করুন:
- আপনার ভাগ করা লাইব্রেরিগুলির প্যাকেজিং আপডেট করুন৷
- 16 KB ELF প্রান্তিককরণ ব্যবহার করে আপনার অ্যাপ কম্পাইল করুন
- কোড ঠিক করুন এবং রানটাইম সমস্যা সমাধান করুন
- 16 KB সমর্থনের জন্য SDK চেক করুন
আপনার ভাগ করা লাইব্রেরিগুলির প্যাকেজিং আপডেট করুন৷
আমরা সুপারিশ করি যে আপনি AGP সংস্করণ 8.5.1 বা উচ্চতর সংস্করণে আপগ্রেড করুন এবং অসংকুচিত শেয়ার্ড লাইব্রেরি ব্যবহার করুন।
AGP সংস্করণ 8.5.1 বা উচ্চতর
16 KB ডিভাইসের জন্য এমন অ্যাপের প্রয়োজন হয় যেগুলিকে 16 KB জিপ-সারিবদ্ধ সীমারেখায় সারিবদ্ধ করার জন্য আনকমপ্রেসড শেয়ার্ড লাইব্রেরি সহ পাঠানো হয়। এটি করার জন্য, আপনাকে Android Gradle Plugin (AGP) সংস্করণ 8.5.1 বা উচ্চতর আপগ্রেড করতে হবে। আপগ্রেড প্রক্রিয়ার বিশদ বিবরণের জন্য Android Gradle প্লাগইন আপগ্রেড সহকারী বিভাগে পড়ুন।
AGP সংস্করণ 8.5 বা তার কম
আপনি যদি AGP-কে 8.5.1 বা উচ্চতর সংস্করণে আপগ্রেড করতে না পারেন, তাহলে বিকল্পটি হল সংকুচিত শেয়ার্ড লাইব্রেরি ব্যবহার করার জন্য স্যুইচ করা। আনলাইনড শেয়ার্ড লাইব্রেরিগুলির সাথে অ্যাপ ইনস্টলেশন সমস্যা এড়াতে আপনার অ্যাপ প্যাকেজ করার সময় Gradle আপনার শেয়ার করা লাইব্রেরিগুলিকে সংকুচিত করতে আপনার Gradle কনফিগারেশন আপডেট করুন।
গ্রোভি
আপনার build.gradle
ফাইলে, নিম্নলিখিত বিকল্প যোগ করুন:
android {
...
packagingOptions {
jniLibs {
useLegacyPackaging true
}
}
}
কোটলিন
আপনার build.gradle.kts
ফাইলে, নিম্নলিখিত বিকল্প যোগ করুন:
android {
...
packagingOptions {
jniLibs {
useLegacyPackaging = true
}
}
}
16 KB ELF প্রান্তিককরণ ব্যবহার করে আপনার অ্যাপ কম্পাইল করুন
আপনার অ্যাপটি চালানোর জন্য 16 KB ডিভাইসের জন্য শেয়ার করা লাইব্রেরির ELF সেগমেন্টগুলিকে 16 KB ELF অ্যালাইনমেন্ট ব্যবহার করে সঠিকভাবে সারিবদ্ধ করা প্রয়োজন।
গেম ডেভেলপারদের জন্য, যদি আপনার গেম ইউনিটি গেম ইঞ্জিনের উপরে চলে, ইউনিটি গাইড পড়ুন। যদি আপনার গেমটি অবাস্তব গেম ইঞ্জিনের উপরে চলে, তবে অবাস্তব গাইড পড়ুন। নেটিভ গেম ইঞ্জিনের জন্য, এই গাইডটি চালিয়ে যান।
16 KB ELF অ্যালাইনমেন্ট ব্যবহার করে আপনার অ্যাপ কম্পাইল করতে, আপনি যে Android NDK ব্যবহার করছেন তার সংস্করণের উপর নির্ভর করে নিম্নলিখিত বিভাগগুলির একটিতে ধাপগুলি সম্পূর্ণ করুন৷
Android NDK r28 এবং উচ্চতর
NDK সংস্করণ r28 এবং উচ্চতর কম্পাইল 16 KB- ডিফল্টরূপে সারিবদ্ধ।
অ্যান্ড্রয়েড NDK r27
অ্যান্ড্রয়েড NDK সংস্করণ r27 এবং উচ্চতর সহ 16 KB-সংরক্ষিত শেয়ার্ড লাইব্রেরি সংকলন সমর্থন করতে, আপনাকে আপনার ndk-build
, build.gradle
, build.gradle.kts
, বা লিঙ্কার পতাকাগুলিকে নিম্নরূপ আপডেট করতে হবে:
ndk-বিল্ড
আপনার 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
Android NDK r26 এবং নিম্ন
অ্যান্ড্রয়েড এনডিকে সংস্করণ r26 বা তার নিচের 16 কেবি-সারিবদ্ধ শেয়ার্ড লাইব্রেরি সংকলন সমর্থন করতে, আপনাকে আপনার ndk-build
বা cmake
কনফিগারেশনটি নিম্নরূপ আপডেট করতে হবে:
ndk-বিল্ড
16 KB ELF প্রান্তিককরণ সক্ষম করতে আপনার Android.mk
আপডেট করুন:
LOCAL_LDFLAGS += "-Wl,-z,max-page-size=16384"
সিমেক
16 KB ELF প্রান্তিককরণ সক্ষম করতে আপনার CMakeLists.txt
আপডেট করুন:
target_link_options(${CMAKE_PROJECT_NAME} PRIVATE "-Wl,-z,max-page-size=16384")
কোড ঠিক করুন এবং রানটাইম সমস্যা সমাধান করুন
এমনকি যদি আপনার অ্যাপটি 16 KB-সারিবদ্ধ হয়, তবে আপনার অ্যাপটি ত্রুটির সম্মুখীন হতে পারে যদি আপনার কোডের স্থানগুলি ধরে নেয় যে একটি ডিভাইস একটি নির্দিষ্ট পৃষ্ঠার আকার ব্যবহার করছে। এটি এড়াতে, নিম্নলিখিত পদক্ষেপগুলি সম্পূর্ণ করুন:
আপনার কোড লজিকের
PAGE_SIZE
ধ্রুবক বা দৃষ্টান্তগুলিকে উল্লেখ করে এমন কোনও হার্ড-কোডেড নির্ভরতা সরান যা অনুমান করে যে একটি ডিভাইসের পৃষ্ঠার আকার 4 KB (4096
)।পরিবর্তে
getpagesize()
বাsysconf(_SC_PAGESIZE)
ব্যবহার করুন।mmap()
এবং অন্যান্য API-এর ব্যবহারগুলি সন্ধান করুন যার জন্য পৃষ্ঠা-সারিবদ্ধ আর্গুমেন্ট প্রয়োজন এবং যেখানে প্রয়োজন সেখানে বিকল্পগুলির সাথে প্রতিস্থাপন করুন।
কিছু ক্ষেত্রে, যদি আপনার অ্যাপ PAGE_SIZE
একটি সুবিধাজনক মান হিসাবে ব্যবহার করে যা অন্তর্নিহিত পৃষ্ঠার আকারের সাথে আবদ্ধ না থাকে, তাহলে এটি 16 KB মোডে ব্যবহার করার সময় আপনার অ্যাপটি ভেঙে যাবে না। যাইহোক, যদি এই মানটি MAP_FIXED
ছাড়া mmap
সহ কার্নেলে প্রেরণ করা হয়, কার্নেল এখনও একটি সম্পূর্ণ পৃষ্ঠা ব্যবহার করে, যা কিছু মেমরি নষ্ট করে। এই কারণে, NDK r27 এবং উচ্চতর 16 KB মোড সক্ষম হলে PAGE_SIZE
অনির্ধারিত থাকে৷
যদি আপনার অ্যাপটি এইভাবে PAGE_SIZE
ব্যবহার করে এবং কখনই সরাসরি এই মানটি কার্নেলে না দেয়, তাহলে PAGE_SIZE
ব্যবহার করার পরিবর্তে, একটি নতুন নাম দিয়ে একটি নতুন ভেরিয়েবল তৈরি করুন যাতে এটি প্রতিফলিত হয় যে এটি অন্য উদ্দেশ্যে ব্যবহার করা হয় এবং একটি বাস্তব মেমরি পৃষ্ঠা প্রতিফলিত করে না।
16 KB সমর্থনের জন্য SDK চেক করুন
অনেক SDK 16 KB পৃষ্ঠার আকারের সাথে সামঞ্জস্যপূর্ণ, বিশেষ করে যদি আপনি সেগুলি নিজে তৈরি করেন বা সাম্প্রতিক প্রিবিল্টগুলি পান। যাইহোক, যেহেতু কিছু SDK প্রিবিল্ট বা SDK সংস্করণ 16 KB সামঞ্জস্যপূর্ণ নয়, তাই 16 KB এর সাথে কোন সংস্করণটি ব্যবহার করবেন তা নির্ধারণ করতে আপনার প্রতিটি SDK প্রদানকারীর জন্য ওয়েবসাইটটি পরীক্ষা করা উচিত।
16 KB পরিবেশে আপনার অ্যাপ পরীক্ষা করুন
আপনি 16 KB ডিভাইসের জন্য সমর্থন সহ আপনার অ্যাপ তৈরি করার পরে, আপনি আপনার অ্যাপটি 16 KB এনভায়রনমেন্টে পরীক্ষা করে দেখতে চাইবেন যে আপনার অ্যাপ কোনো রিগ্রেশনের সম্মুখীন হচ্ছে কিনা। এটি করার জন্য, এই পদক্ষেপগুলি অনুসরণ করুন:
নিম্নলিখিত পরীক্ষার পরিবেশগুলির মধ্যে একটি সেট আপ করুন:
আপনার পরীক্ষা ডিভাইস শুরু করুন, তারপর এটি একটি 16 KB পরিবেশ ব্যবহার করছে তা যাচাই করতে নিম্নলিখিত কমান্ডটি চালান:
adb shell getconf PAGE_SIZE
কমান্ডটি
16384
এর একটি মান প্রদান করবে।আপনার অ্যাপটি 16 KB-সারিবদ্ধ তা যাচাই করতে নিম্নলিখিত
zipalign
কমান্ডটি চালান, যেখানে APK_NAME হল আপনার অ্যাপের APK ফাইলের নাম:zipalign -c -P 16 -v 4 APK_NAME.apk
আপনার অ্যাপটি পুঙ্খানুপুঙ্খভাবে পরীক্ষা করুন, নির্দিষ্ট পৃষ্ঠার আকারের উল্লেখ করে এমন কোডের দৃষ্টান্ত পরিবর্তনের দ্বারা প্রভাবিত হতে পারে এমন যেকোনো ক্ষেত্রের উপর ফোকাস করুন।
একটি 16-KB-ভিত্তিক, Android 15 সিস্টেম চিত্র সহ Android এমুলেটর সেট আপ করুন৷
Android এমুলেটর ব্যবহার করে একটি 16 KB পরিবেশ সেট আপ করতে, এই পদক্ষেপগুলি অনুসরণ করুন:
16-KB-ভিত্তিক, অ্যান্ড্রয়েড 15 এমুলেটর সিস্টেমের ছবিগুলি অ্যান্ড্রয়েড স্টুডিও জেলিফিশের সাথে সামঞ্জস্যপূর্ণ | 2023.3.1 বা তার বেশি। যাইহোক, 16 KB ডিভাইসের সাথে কাজ করার সময় সেরা অভিজ্ঞতার জন্য, Android Studio Ladybug | ব্যবহার করুন 2024.2.1 বা তার বেশি।
আমরা সবসময় নতুন বৈশিষ্ট্য নিয়ে কাজ করছি, তাই নতুন সংস্করণ বা Android স্টুডিওর সর্বশেষ পূর্বরূপ সংস্করণ উপলব্ধ হওয়ার সাথে সাথে ডাউনলোড করার কথা বিবেচনা করুন।
মনে রাখবেন যে আপনি আপনার Android স্টুডিওর বিদ্যমান সংস্করণ ইনস্টল রাখতে পারেন, কারণ আপনি পাশাপাশি একাধিক সংস্করণ ইনস্টল করতে পারেন।
অ্যান্ড্রয়েড স্টুডিওতে, টুলস > SDK ম্যানেজার-এ ক্লিক করুন।
SDK প্ল্যাটফর্ম ট্যাবে, প্যাকেজ বিশদ দেখান চেক করুন, তারপরে Android VanillaIceCream বা উচ্চতর বিভাগটি প্রসারিত করুন এবং আপনি যে ভার্চুয়াল ডিভাইসগুলি তৈরি করতে চান তার উপর নির্ভর করে নিম্নলিখিত এমুলেটর সিস্টেম চিত্রগুলির মধ্যে একটি বা উভয় নির্বাচন করুন:
- Google APIs পরীক্ষামূলক 16 KB পৃষ্ঠার আকার ARM 64 v8a সিস্টেম চিত্র৷
- Google APIs পরীক্ষামূলক 16 KB পৃষ্ঠার আকার Intel x86_64 Atom System Image
আপনি যে সিস্টেমের ছবি নির্বাচন করেছেন তা ডাউনলোড করতে প্রয়োগ করুন > ঠিক আছে ক্লিক করুন।
Android 15 এর জন্য একটি ভার্চুয়াল ডিভাইস সেট আপ করার পদক্ষেপগুলি অনুসরণ করুন এবং যখন একটি সিস্টেম চিত্র নির্বাচন করার জন্য অনুরোধ করা হয়, তখন আপনার ডাউনলোড করা 16 KB সিস্টেম চিত্রটি নির্বাচন করুন৷ যদি এটি স্বয়ংক্রিয়ভাবে প্রস্তাবিত না হয়, আপনি অন্যান্য চিত্র ট্যাবে 16 KB সিস্টেম চিত্রটি খুঁজে পেতে পারেন।
কিছু এমুলেটর সংস্করণ এবং সিস্টেম চিত্রের জন্য অতিরিক্ত পদক্ষেপ
অ্যান্ড্রয়েড এমুলেটর সংস্করণ 35.1.5 থেকে 35.1.20 পর্যন্ত, এবং SDK ম্যানেজারে অফার করা Android 15.0 16 KB পৃষ্ঠা আকারের সিস্টেম চিত্রগুলির সংশোধন 4 এর আগে, x86_64 সিস্টেমে একটি 16 KB পরিবেশ অনুকরণ করতে, আপনাকে নিম্নলিখিত পদক্ষেপগুলিও সম্পূর্ণ করতে হবে৷ 35.1.21 সংস্করণের পরে এবং Android 15.0 16 KB পৃষ্ঠা সাইজ সিস্টেমের ছবি বা পরবর্তী সংস্করণ 4-এর পরে এই পদক্ষেপগুলির প্রয়োজন নেই৷
- ডিভাইস ম্যানেজারে, 16 KB ছবির পাশে 3টি বিন্দুতে ক্লিক করুন, তারপর Disk এ Show এ ক্লিক করুন।
- এই ফোল্ডারে,
config.ini
ফাইলটি খুঁজুন। config.ini
ফাইলে নিম্নলিখিত লাইন যোগ করুন এবং আপনার পরিবর্তনগুলি সংরক্ষণ করুন:kernel.parameters = androidboot.page_shift=14
আপনার পরিবর্তনগুলি যাচাই করতে, নিম্নলিখিত কমান্ডটি চালান, যা
16384
রিটার্ন করবে:adb shell getconf PAGE_SIZE
এমুলেটর চালু করুন
আপনি অ্যান্ড্রয়েড এমুলেটর এবং ভার্চুয়াল ডিভাইসগুলি সেট আপ করা শেষ করার পরে, লক্ষ্য ডিভাইস মেনু থেকে বা কমান্ড লাইন থেকে এমুলেটরটি চালু করুন৷
বিকাশকারী বিকল্পগুলি ব্যবহার করে একটি ডিভাইসে 16 KB মোড সক্ষম করুন৷

16 KB মোডে একটি ডিভাইস বুট করতে 16KB পৃষ্ঠা আকারের বিকাশকারী বিকল্পের সাথে বুটটি টগল করুন।
Android 15 QPR1 দিয়ে শুরু করে, আপনি ডিভাইসটিকে 16 KB মোডে বুট করতে এবং ডিভাইসে পরীক্ষা করার জন্য নির্দিষ্ট ডিভাইসে উপলব্ধ ডেভেলপার বিকল্পটি ব্যবহার করতে পারেন। বিকাশকারী বিকল্পটি ব্যবহার করার আগে, সেটিংস -> সিস্টেম -> সফ্টওয়্যার আপডেটগুলিতে যান এবং উপলব্ধ যে কোনও আপডেট প্রয়োগ করুন৷
এই বিকাশকারী বিকল্পটি নিম্নলিখিত ডিভাইসগুলিতে উপলব্ধ:
Pixel 8 এবং 8 Pro (Android 15 QPR1 বা উচ্চতর সহ)
সতর্কতা : Android 15 QPR2 Beta 3 এর সাথে একটি পরিচিত সমস্যার কারণে, Android 15 QPR2 বিটা 3 ইনস্টল করার পরে এবং 16 KB মোডে ডিভাইস বুট করার পরে টাচস্ক্রিন Pixel 8 ডিভাইসে কাজ করে না। এই সমস্যাটি Pixel 8 Pro ডিভাইসগুলিকে প্রভাবিত করে না।
Pixel 8a (Android 15 QPR1 বা উচ্চতর সহ)
সতর্কতা : Android 15 QPR2 Beta 3 এর সাথে একটি পরিচিত সমস্যার কারণে, Android 15 QPR2 বিটা 3 ইনস্টল করার পরে এবং 16 KB মোডে ডিভাইস বুট করার পরে টাচস্ক্রিন Pixel 8a ডিভাইসে কাজ করে না।
Pixel 9, 9 Pro, এবং 9 Pro XL (Android 15 QPR2 বিটা 2 বা উচ্চতর সহ)
Google Play সামঞ্জস্যের প্রয়োজনীয়তা
যেহেতু ডিভাইস নির্মাতারা পারফরম্যান্স অপ্টিমাইজ করার জন্য ডিভাইসগুলিকে আরও RAM দিয়ে সজ্জিত করে, অনেকেই 16 KB এর মতো বড় পৃষ্ঠার আকার গ্রহণ করবে। এই আসন্ন ডিভাইসগুলির লঞ্চের প্রস্তুতির জন্য, Google Play সমস্ত নতুন অ্যাপের জন্য একটি সামঞ্জস্যের প্রয়োজনীয়তা চালু করেছে এবং বিদ্যমান অ্যাপগুলির আপডেট এবং Android 15+ ডিভাইসগুলিকে 1লা নভেম্বর, 2025 থেকে শুরু করে 16 KB পৃষ্ঠার আকার সমর্থন করতে লক্ষ্য করে।
এই সামঞ্জস্যের প্রয়োজনীয়তা সম্পর্কে আরও পড়তে, এই ব্লগ পোস্টটি দেখুন।
,ঐতিহাসিকভাবে, অ্যান্ড্রয়েড শুধুমাত্র 4 KB মেমরি পৃষ্ঠার আকার সমর্থন করে, যা অ্যান্ড্রয়েড ডিভাইসে সাধারণত থাকা মোট মেমরির গড় পরিমাণের জন্য সিস্টেম মেমরির কার্যকারিতা অপ্টিমাইজ করেছে। অ্যান্ড্রয়েড 15 দিয়ে শুরু করে, AOSP 16 KB (16 KB ডিভাইস) এর পৃষ্ঠার আকার ব্যবহার করার জন্য কনফিগার করা ডিভাইসগুলিকে সমর্থন করে। যদি আপনার অ্যাপটি SDK-এর মাধ্যমে প্রত্যক্ষ বা পরোক্ষভাবে কোনও NDK লাইব্রেরি ব্যবহার করে, তাহলে এই 16 KB ডিভাইসে কাজ করার জন্য আপনাকে আপনার অ্যাপটি পুনর্নির্মাণ করতে হবে।
যেহেতু ডিভাইস নির্মাতারা বৃহত্তর পরিমাণে ভৌত মেমরি (RAM) সহ ডিভাইসগুলি তৈরি করতে থাকে, এই ডিভাইসগুলির মধ্যে অনেকগুলি ডিভাইসের কার্যকারিতা অপ্টিমাইজ করার জন্য 16 KB (এবং শেষ পর্যন্ত আরও বড়) পৃষ্ঠার আকার গ্রহণ করবে। 16 KB পৃষ্ঠার আকারের ডিভাইসগুলির জন্য সমর্থন যোগ করা আপনার অ্যাপটিকে এই ডিভাইসগুলিতে চালানোর জন্য সক্ষম করে এবং আপনার অ্যাপটিকে সংশ্লিষ্ট কর্মক্ষমতা উন্নতি থেকে উপকৃত হতে সাহায্য করে। পুনরায় কম্পাইল না করে, অ্যাপগুলি 16 KB ডিভাইসে কাজ নাও করতে পারে যখন সেগুলি ভবিষ্যতের Android রিলিজে তৈরি করা হয়।
আপনার অ্যাপের জন্য সমর্থন যোগ করতে আপনাকে সাহায্য করার জন্য, আমরা কীভাবে আপনার অ্যাপটি প্রভাবিত হয়েছে কিনা তা পরীক্ষা করতে , কীভাবে আপনার অ্যাপটি পুনর্নির্মাণ করবেন (যদি প্রযোজ্য হয়), এবং কীভাবে এমুলেটর ব্যবহার করে (Android সহ) ব্যবহার করে আপনার অ্যাপটি 16 KB এনভায়রনমেন্টে পরীক্ষা করবেন সে সম্পর্কে নির্দেশিকা প্রদান করেছি। অ্যান্ড্রয়েড এমুলেটরের জন্য 15টি সিস্টেম চিত্র)।
সুবিধা এবং কর্মক্ষমতা লাভ
16 KB পৃষ্ঠার আকারের সাথে কনফিগার করা ডিভাইসগুলি গড়ে সামান্য বেশি মেমরি ব্যবহার করে, তবে সিস্টেম এবং অ্যাপ উভয়ের জন্য বিভিন্ন কর্মক্ষমতা উন্নতিও লাভ করে:
- সিস্টেম মেমরির চাপে থাকাকালীন অ্যাপ লঞ্চের সময় কম: গড়ে 3.16% কম, কিছু অ্যাপের জন্য আরও উল্লেখযোগ্য উন্নতি (30% পর্যন্ত) যা আমরা পরীক্ষা করেছি
- অ্যাপ লঞ্চের সময় পাওয়ার ড্র কম হয়েছে: গড়ে 4.56% হ্রাস
- দ্রুত ক্যামেরা লঞ্চ: গড়ে 4.48% দ্রুত গরম শুরু হয় এবং গড়ে 6.60% দ্রুত ঠান্ডা শুরু হয়
- উন্নত সিস্টেম বুট সময়: গড়ে 8% (প্রায় 950 মিলিসেকেন্ড) দ্বারা উন্নত
এই উন্নতিগুলি আমাদের প্রাথমিক পরীক্ষার উপর ভিত্তি করে করা হয়েছে এবং প্রকৃত ডিভাইসগুলির ফলাফলগুলি সম্ভবত আলাদা হতে পারে৷ আমরা আমাদের পরীক্ষা চালিয়ে যাওয়ার সাথে সাথে অ্যাপগুলির সম্ভাব্য লাভের অতিরিক্ত বিশ্লেষণ প্রদান করব।
আপনার অ্যাপ প্রভাবিত হয়েছে কিনা তা পরীক্ষা করুন
যদি আপনার অ্যাপ কোনো নেটিভ কোড ব্যবহার করে , তাহলে আপনার অ্যাপটিকে 16 KB ডিভাইসের জন্য সমর্থন সহ পুনর্নির্মাণ করা উচিত। যদি আপনি নিশ্চিত না হন যে আপনার অ্যাপটি নেটিভ কোড ব্যবহার করে, তাহলে আপনি APK বিশ্লেষক ব্যবহার করে সনাক্ত করতে পারেন যে কোনও নেটিভ কোড উপস্থিত আছে কিনা এবং তারপরে আপনি যে কোনও ভাগ করা লাইব্রেরির জন্য ELF বিভাগগুলির সারিবদ্ধতা পরীক্ষা করতে পারেন ।
যদি আপনার অ্যাপটি শুধুমাত্র জাভা প্রোগ্রামিং ভাষায় বা কোটলিনে লেখা কোড ব্যবহার করে, যার মধ্যে সব লাইব্রেরি বা SDK সহ, তাহলে আপনার অ্যাপটি ইতিমধ্যেই 16 KB ডিভাইস সমর্থন করে। তবুও, আমরা সুপারিশ করছি যে আপনি অ্যাপের আচরণে কোনো অপ্রত্যাশিত রিগ্রেশন নেই তা যাচাই করতে 16 KB পরিবেশে আপনার অ্যাপটি পরীক্ষা করুন ।
আপনার অ্যাপ কি নেটিভ কোড ব্যবহার করে?
আপনার অ্যাপটি নেটিভ কোড ব্যবহার করে যদি নিচের কোনটি প্রযোজ্য হয়:
- আপনার অ্যাপ যেকোনো C/C++ (নেটিভ) কোড ব্যবহার করে। আপনার অ্যাপ যদি Android NDK ব্যবহার করে, তাহলে আপনার অ্যাপটি নেটিভ কোড ব্যবহার করে।
- আপনার অ্যাপ যেকোন থার্ড-পার্টি নেটিভ লাইব্রেরি বা নির্ভরতা (যেমন SDK) এর সাথে লিঙ্ক করে যা সেগুলি ব্যবহার করে।
- আপনার অ্যাপটি একটি থার্ড-পার্টি অ্যাপ নির্মাতা দ্বারা তৈরি করা হয়েছে যেটি ডিভাইসে নেটিভ লাইব্রেরি ব্যবহার করে।
APK বিশ্লেষক ব্যবহার করে নেটিভ লাইব্রেরি সনাক্ত করুন
APK বিশ্লেষক একটি টুল যা আপনাকে একটি নির্মিত APK এর বিভিন্ন দিক মূল্যায়ন করতে দেয়। আপনার অ্যাপটি নেটিভ কোড ব্যবহার করে কিনা তা পরীক্ষা করতে (এটি 16 KB সামঞ্জস্যপূর্ণ কিনা)
- অ্যান্ড্রয়েড স্টুডিও খুলুন, তারপরে ফাইল > খুলুন ক্লিক করুন এবং যেকোনো প্রকল্প বেছে নিন।
মেনু বার থেকে, Build > Analyze APK... এ ক্লিক করুন।
আপনি যে APK বিশ্লেষণ করতে চান সেটি বেছে নিন।
lib
ফোল্ডারের মধ্যে দেখুন, যেটি শেয়ার করা অবজেক্ট (.so
) ফাইলগুলিকে হোস্ট করে যদি থাকে। কোনো শেয়ার করা অবজেক্ট ফাইল উপস্থিত থাকলে, আপনার অ্যাপ নেটিভ কোড ব্যবহার করে। যদি কোনো শেয়ার করা অবজেক্ট ফাইল না থাকে বা কোনোlib
ফোল্ডার না থাকে, তাহলে আপনার অ্যাপ নেটিভ কোড ব্যবহার করে না।
শেয়ার্ড লাইব্রেরির জন্য ELF সেগমেন্টের প্রান্তিককরণ পরীক্ষা করুন
যেকোনো শেয়ার করা লাইব্রেরির জন্য, যাচাই করুন যে শেয়ার করা লাইব্রেরির ELF সেগমেন্টগুলি 16 KB ELF অ্যালাইনমেন্ট ব্যবহার করে সঠিকভাবে সারিবদ্ধ হয়েছে। আপনি যদি Linux বা macOS-তে বিকাশ করছেন, তাহলে নিচের বিভাগে বর্ণিত check_elf_alignment.sh
স্ক্রিপ্টটি ব্যবহার করতে পারেন। আপনি সরাসরি কমান্ড-লাইন সরঞ্জামগুলিও ব্যবহার করতে পারেন।
check_elf_alignment.sh স্ক্রিপ্ট ব্যবহার করুন (Linux বা macOS)
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 স্টুডিওতে SDK ম্যানেজার বা
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 ফাইলটি বের করেছেন, শেয়ার করা অবজেক্ট (
.so
) ফাইলগুলির জন্যlib
ডিরেক্টরির বিষয়বস্তু পরীক্ষা করুন৷ এগুলি একই শেয়ার করা অবজেক্ট ফাইল যা আপনি APK অ্যানালাইজার ব্যবহার করে নেটিভ লাইব্রেরি শনাক্ত করার সময় দেখেছেন। প্রতিটি ভাগ করা বস্তু ফাইলে নিম্নলিখিত কমান্ড চালান:লিনাক্স বা ম্যাকোস
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
হল সেই ডিরেক্টরির পথ যেখানে আপনি Android SDK ইনস্টল করেছেন,SHARED_OBJECT_FILE
হল শেয়ার্ড অবজেক্ট ফাইলের নাম যা আপনি চেক করছেন এবংNDK_VERSION
হল Android 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
হল সেই ডিরেক্টরির পথ যেখানে আপনি Android SDK ইনস্টল করেছেন এবংAPK_NAME
হল আপনার অ্যাপের APK ফাইলের নাম৷ আউটপুটের শেষ লাইনটি বলবে "যাচাই সফল হয়েছে" যদি সমস্ত ভাগ করা লাইব্রেরি সঠিকভাবে সারিবদ্ধ থাকে।যাচাইকরণ ব্যর্থ হলে, কিছু ভাগ করা লাইব্রেরি পুনরায় সাজাতে হবে, তাই আপনাকে সেই লাইব্রেরির জন্য প্যাকেজিং আপডেট করতে হবে, তারপর আপনার অ্যাপটি পুনরায় কম্পাইল করুন এবং এই বিভাগে পদক্ষেপগুলি অনুসরণ করে পুনরায় পরীক্ষা করুন৷
16 KB ডিভাইসের জন্য সমর্থন সহ আপনার অ্যাপ তৈরি করুন
যদি আপনার অ্যাপটি নেটিভ কোড ব্যবহার করে, তাহলে আপনার অ্যাপটি 16 KB ডিভাইস সমর্থন করে কিনা তা নিশ্চিত করতে নিম্নলিখিত বিভাগে বর্ণিত ধাপগুলি সম্পূর্ণ করুন:
- আপনার ভাগ করা লাইব্রেরিগুলির প্যাকেজিং আপডেট করুন৷
- 16 KB ELF প্রান্তিককরণ ব্যবহার করে আপনার অ্যাপ কম্পাইল করুন
- কোড ঠিক করুন এবং রানটাইম সমস্যা সমাধান করুন
- 16 KB সমর্থনের জন্য SDK চেক করুন
আপনার ভাগ করা লাইব্রেরিগুলির প্যাকেজিং আপডেট করুন৷
আমরা সুপারিশ করি যে আপনি AGP সংস্করণ 8.5.1 বা উচ্চতর সংস্করণে আপগ্রেড করুন এবং অসংকুচিত শেয়ার্ড লাইব্রেরি ব্যবহার করুন।
AGP সংস্করণ 8.5.1 বা উচ্চতর
16 KB ডিভাইসের জন্য এমন অ্যাপের প্রয়োজন হয় যেগুলিকে 16 KB জিপ-সারিবদ্ধ সীমারেখায় সারিবদ্ধ করার জন্য আনকমপ্রেসড শেয়ার্ড লাইব্রেরি সহ পাঠানো হয়। এটি করার জন্য, আপনাকে Android Gradle Plugin (AGP) সংস্করণ 8.5.1 বা উচ্চতর আপগ্রেড করতে হবে। আপগ্রেড প্রক্রিয়ার বিশদ বিবরণের জন্য Android Gradle প্লাগইন আপগ্রেড সহকারী বিভাগে পড়ুন।
AGP সংস্করণ 8.5 বা তার কম
আপনি যদি AGP-কে 8.5.1 বা উচ্চতর সংস্করণে আপগ্রেড করতে না পারেন, তাহলে বিকল্পটি হল সংকুচিত শেয়ার্ড লাইব্রেরি ব্যবহার করার জন্য স্যুইচ করা। আনলাইনড শেয়ার্ড লাইব্রেরিগুলির সাথে অ্যাপ ইনস্টলেশন সমস্যা এড়াতে আপনার অ্যাপ প্যাকেজ করার সময় Gradle আপনার শেয়ার করা লাইব্রেরিগুলিকে সংকুচিত করতে আপনার Gradle কনফিগারেশন আপডেট করুন।
গ্রোভি
আপনার build.gradle
ফাইলে, নিম্নলিখিত বিকল্প যোগ করুন:
android {
...
packagingOptions {
jniLibs {
useLegacyPackaging true
}
}
}
কোটলিন
আপনার build.gradle.kts
ফাইলে, নিম্নলিখিত বিকল্প যোগ করুন:
android {
...
packagingOptions {
jniLibs {
useLegacyPackaging = true
}
}
}
16 KB ELF প্রান্তিককরণ ব্যবহার করে আপনার অ্যাপ কম্পাইল করুন
আপনার অ্যাপটি চালানোর জন্য 16 KB ডিভাইসের জন্য শেয়ার করা লাইব্রেরির ELF সেগমেন্টগুলিকে 16 KB ELF অ্যালাইনমেন্ট ব্যবহার করে সঠিকভাবে সারিবদ্ধ করা প্রয়োজন।
গেম ডেভেলপারদের জন্য, যদি আপনার গেম ইউনিটি গেম ইঞ্জিনের উপরে চলে, ইউনিটি গাইড পড়ুন। যদি আপনার গেমটি অবাস্তব গেম ইঞ্জিনের উপরে চলে, তবে অবাস্তব গাইড পড়ুন। নেটিভ গেম ইঞ্জিনের জন্য, এই গাইডটি চালিয়ে যান।
16 KB ELF অ্যালাইনমেন্ট ব্যবহার করে আপনার অ্যাপ কম্পাইল করতে, আপনি যে Android NDK ব্যবহার করছেন তার সংস্করণের উপর নির্ভর করে নিম্নলিখিত বিভাগগুলির একটিতে ধাপগুলি সম্পূর্ণ করুন৷
Android NDK r28 এবং উচ্চতর
NDK সংস্করণ r28 এবং উচ্চতর কম্পাইল 16 KB- ডিফল্টরূপে সারিবদ্ধ।
অ্যান্ড্রয়েড NDK r27
অ্যান্ড্রয়েড NDK সংস্করণ r27 এবং উচ্চতর সহ 16 KB-সংরক্ষিত শেয়ার্ড লাইব্রেরি সংকলন সমর্থন করতে, আপনাকে আপনার ndk-build
, build.gradle
, build.gradle.kts
, বা লিঙ্কার পতাকাগুলিকে নিম্নরূপ আপডেট করতে হবে:
ndk-বিল্ড
আপনার 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
Android NDK r26 এবং নিম্ন
অ্যান্ড্রয়েড এনডিকে সংস্করণ r26 বা তার নিচের 16 কেবি-সারিবদ্ধ শেয়ার্ড লাইব্রেরি সংকলন সমর্থন করতে, আপনাকে আপনার ndk-build
বা cmake
কনফিগারেশনটি নিম্নরূপ আপডেট করতে হবে:
ndk-বিল্ড
16 KB ELF প্রান্তিককরণ সক্ষম করতে আপনার Android.mk
আপডেট করুন:
LOCAL_LDFLAGS += "-Wl,-z,max-page-size=16384"
সিমেক
16 KB ELF প্রান্তিককরণ সক্ষম করতে আপনার CMakeLists.txt
আপডেট করুন:
target_link_options(${CMAKE_PROJECT_NAME} PRIVATE "-Wl,-z,max-page-size=16384")
কোড ঠিক করুন এবং রানটাইম সমস্যা সমাধান করুন
এমনকি যদি আপনার অ্যাপটি 16 KB-সারিবদ্ধ হয়, তবে আপনার অ্যাপটি ত্রুটির সম্মুখীন হতে পারে যদি আপনার কোডের স্থানগুলি ধরে নেয় যে একটি ডিভাইস একটি নির্দিষ্ট পৃষ্ঠার আকার ব্যবহার করছে। এটি এড়াতে, নিম্নলিখিত পদক্ষেপগুলি সম্পূর্ণ করুন:
আপনার কোড লজিকের
PAGE_SIZE
ধ্রুবক বা দৃষ্টান্তগুলিকে উল্লেখ করে এমন কোনও হার্ড-কোডেড নির্ভরতা সরান যা অনুমান করে যে একটি ডিভাইসের পৃষ্ঠার আকার 4 KB (4096
)।পরিবর্তে
getpagesize()
বাsysconf(_SC_PAGESIZE)
ব্যবহার করুন।mmap()
এবং অন্যান্য API-এর ব্যবহারগুলি সন্ধান করুন যার জন্য পৃষ্ঠা-সারিবদ্ধ আর্গুমেন্ট প্রয়োজন এবং যেখানে প্রয়োজন সেখানে বিকল্পগুলির সাথে প্রতিস্থাপন করুন।
কিছু ক্ষেত্রে, যদি আপনার অ্যাপ PAGE_SIZE
একটি সুবিধাজনক মান হিসাবে ব্যবহার করে যা অন্তর্নিহিত পৃষ্ঠার আকারের সাথে আবদ্ধ না থাকে, তাহলে এটি 16 KB মোডে ব্যবহার করার সময় আপনার অ্যাপটি ভেঙে যাবে না। যাইহোক, যদি এই মানটি MAP_FIXED
ছাড়া mmap
সহ কার্নেলে প্রেরণ করা হয়, কার্নেল এখনও একটি সম্পূর্ণ পৃষ্ঠা ব্যবহার করে, যা কিছু মেমরি নষ্ট করে। এই কারণে, NDK r27 এবং উচ্চতর 16 KB মোড সক্ষম হলে PAGE_SIZE
অনির্ধারিত থাকে৷
যদি আপনার অ্যাপটি এইভাবে PAGE_SIZE
ব্যবহার করে এবং কখনই সরাসরি এই মানটি কার্নেলে না দেয়, তাহলে PAGE_SIZE
ব্যবহার করার পরিবর্তে, একটি নতুন নাম দিয়ে একটি নতুন ভেরিয়েবল তৈরি করুন যাতে এটি প্রতিফলিত হয় যে এটি অন্য উদ্দেশ্যে ব্যবহার করা হয় এবং একটি বাস্তব মেমরি পৃষ্ঠা প্রতিফলিত করে না।
16 KB সমর্থনের জন্য SDK চেক করুন
অনেক SDK 16 KB পৃষ্ঠার আকারের সাথে সামঞ্জস্যপূর্ণ, বিশেষ করে যদি আপনি সেগুলি নিজে তৈরি করেন বা সাম্প্রতিক প্রিবিল্টগুলি পান। যাইহোক, যেহেতু কিছু SDK প্রিবিল্ট বা SDK সংস্করণ 16 KB সামঞ্জস্যপূর্ণ নয়, তাই 16 KB এর সাথে কোন সংস্করণটি ব্যবহার করবেন তা নির্ধারণ করতে আপনার প্রতিটি SDK প্রদানকারীর জন্য ওয়েবসাইটটি পরীক্ষা করা উচিত।
16 KB পরিবেশে আপনার অ্যাপ পরীক্ষা করুন
আপনি 16 KB ডিভাইসের জন্য সমর্থন সহ আপনার অ্যাপ তৈরি করার পরে, আপনি আপনার অ্যাপটি 16 KB এনভায়রনমেন্টে পরীক্ষা করে দেখতে চাইবেন যে আপনার অ্যাপ কোনো রিগ্রেশনের সম্মুখীন হচ্ছে কিনা। এটি করার জন্য, এই পদক্ষেপগুলি অনুসরণ করুন:
নিম্নলিখিত পরীক্ষার পরিবেশগুলির মধ্যে একটি সেট আপ করুন:
আপনার পরীক্ষা ডিভাইস শুরু করুন, তারপর এটি একটি 16 KB পরিবেশ ব্যবহার করছে তা যাচাই করতে নিম্নলিখিত কমান্ডটি চালান:
adb shell getconf PAGE_SIZE
কমান্ডটি
16384
এর একটি মান প্রদান করবে।আপনার অ্যাপটি 16 KB-সারিবদ্ধ তা যাচাই করতে নিম্নলিখিত
zipalign
কমান্ডটি চালান, যেখানে APK_NAME হল আপনার অ্যাপের APK ফাইলের নাম:zipalign -c -P 16 -v 4 APK_NAME.apk
আপনার অ্যাপটি পুঙ্খানুপুঙ্খভাবে পরীক্ষা করুন, নির্দিষ্ট পৃষ্ঠার আকারের উল্লেখ করে এমন কোডের দৃষ্টান্ত পরিবর্তনের দ্বারা প্রভাবিত হতে পারে এমন যেকোনো ক্ষেত্রের উপর ফোকাস করুন।
একটি 16-KB-ভিত্তিক, Android 15 সিস্টেম চিত্র সহ Android এমুলেটর সেট আপ করুন৷
Android এমুলেটর ব্যবহার করে একটি 16 KB পরিবেশ সেট আপ করতে, এই পদক্ষেপগুলি অনুসরণ করুন:
16-KB-ভিত্তিক, অ্যান্ড্রয়েড 15 এমুলেটর সিস্টেমের ছবিগুলি অ্যান্ড্রয়েড স্টুডিও জেলিফিশের সাথে সামঞ্জস্যপূর্ণ | 2023.3.1 বা তার বেশি। যাইহোক, 16 KB ডিভাইসের সাথে কাজ করার সময় সেরা অভিজ্ঞতার জন্য, Android Studio Ladybug | ব্যবহার করুন 2024.2.1 বা তার বেশি।
আমরা সবসময় নতুন বৈশিষ্ট্য নিয়ে কাজ করছি, তাই নতুন সংস্করণ বা Android স্টুডিওর সর্বশেষ পূর্বরূপ সংস্করণ উপলব্ধ হওয়ার সাথে সাথে ডাউনলোড করার কথা বিবেচনা করুন।
মনে রাখবেন যে আপনি আপনার Android স্টুডিওর বিদ্যমান সংস্করণ ইনস্টল রাখতে পারেন, কারণ আপনি পাশাপাশি একাধিক সংস্করণ ইনস্টল করতে পারেন।
অ্যান্ড্রয়েড স্টুডিওতে, টুলস > SDK ম্যানেজার-এ ক্লিক করুন।
SDK প্ল্যাটফর্ম ট্যাবে, প্যাকেজ বিশদ দেখান চেক করুন, তারপরে Android VanillaIceCream বা উচ্চতর বিভাগটি প্রসারিত করুন এবং আপনি যে ভার্চুয়াল ডিভাইসগুলি তৈরি করতে চান তার উপর নির্ভর করে নিম্নলিখিত এমুলেটর সিস্টেম চিত্রগুলির মধ্যে একটি বা উভয় নির্বাচন করুন:
- Google APIs পরীক্ষামূলক 16 KB পৃষ্ঠার আকার ARM 64 v8a সিস্টেম চিত্র৷
- Google APIs পরীক্ষামূলক 16 KB পৃষ্ঠার আকার Intel x86_64 Atom System Image
আপনি যে সিস্টেমের ছবি নির্বাচন করেছেন তা ডাউনলোড করতে প্রয়োগ করুন > ঠিক আছে ক্লিক করুন।
Android 15 এর জন্য একটি ভার্চুয়াল ডিভাইস সেট আপ করার পদক্ষেপগুলি অনুসরণ করুন এবং যখন একটি সিস্টেম চিত্র নির্বাচন করার জন্য অনুরোধ করা হয়, তখন আপনার ডাউনলোড করা 16 KB সিস্টেম চিত্রটি নির্বাচন করুন৷ যদি এটি স্বয়ংক্রিয়ভাবে প্রস্তাবিত না হয়, আপনি অন্যান্য চিত্র ট্যাবে 16 KB সিস্টেম চিত্রটি খুঁজে পেতে পারেন।
কিছু এমুলেটর সংস্করণ এবং সিস্টেম চিত্রের জন্য অতিরিক্ত পদক্ষেপ
অ্যান্ড্রয়েড এমুলেটর সংস্করণ 35.1.5 থেকে 35.1.20 পর্যন্ত, এবং SDK ম্যানেজারে অফার করা Android 15.0 16 KB পৃষ্ঠা আকারের সিস্টেম চিত্রগুলির সংশোধন 4 এর আগে, x86_64 সিস্টেমে একটি 16 KB পরিবেশ অনুকরণ করতে, আপনাকে নিম্নলিখিত পদক্ষেপগুলিও সম্পূর্ণ করতে হবে৷ 35.1.21 সংস্করণের পরে এবং Android 15.0 16 KB পৃষ্ঠা সাইজ সিস্টেমের ছবি বা পরবর্তী সংস্করণ 4-এর পরে এই পদক্ষেপগুলির প্রয়োজন নেই৷
- ডিভাইস ম্যানেজারে, 16 KB ছবির পাশে 3টি বিন্দুতে ক্লিক করুন, তারপর Disk এ Show এ ক্লিক করুন।
- এই ফোল্ডারে,
config.ini
ফাইলটি খুঁজুন। config.ini
ফাইলে নিম্নলিখিত লাইন যোগ করুন এবং আপনার পরিবর্তনগুলি সংরক্ষণ করুন:kernel.parameters = androidboot.page_shift=14
আপনার পরিবর্তনগুলি যাচাই করতে, নিম্নলিখিত কমান্ডটি চালান, যা
16384
রিটার্ন করবে:adb shell getconf PAGE_SIZE
এমুলেটর চালু করুন
আপনি অ্যান্ড্রয়েড এমুলেটর এবং ভার্চুয়াল ডিভাইসগুলি সেট আপ করা শেষ করার পরে, লক্ষ্য ডিভাইস মেনু থেকে বা কমান্ড লাইন থেকে এমুলেটরটি চালু করুন৷
বিকাশকারী বিকল্পগুলি ব্যবহার করে একটি ডিভাইসে 16 KB মোড সক্ষম করুন৷

16 KB মোডে একটি ডিভাইস বুট করতে 16KB পৃষ্ঠা আকারের বিকাশকারী বিকল্পের সাথে বুটটি টগল করুন।
Android 15 QPR1 দিয়ে শুরু করে, আপনি ডিভাইসটিকে 16 KB মোডে বুট করতে এবং ডিভাইসে পরীক্ষা করার জন্য নির্দিষ্ট ডিভাইসে উপলব্ধ ডেভেলপার বিকল্পটি ব্যবহার করতে পারেন। বিকাশকারী বিকল্পটি ব্যবহার করার আগে, সেটিংস -> সিস্টেম -> সফ্টওয়্যার আপডেটগুলিতে যান এবং উপলব্ধ যে কোনও আপডেট প্রয়োগ করুন৷
এই বিকাশকারী বিকল্পটি নিম্নলিখিত ডিভাইসগুলিতে উপলব্ধ:
Pixel 8 এবং 8 Pro (Android 15 QPR1 বা উচ্চতর সহ)
সতর্কতা : Android 15 QPR2 Beta 3 এর সাথে একটি পরিচিত সমস্যার কারণে, Android 15 QPR2 বিটা 3 ইনস্টল করার পরে এবং 16 KB মোডে ডিভাইস বুট করার পরে টাচস্ক্রিন Pixel 8 ডিভাইসে কাজ করে না। এই সমস্যাটি Pixel 8 Pro ডিভাইসগুলিকে প্রভাবিত করে না।
Pixel 8a (Android 15 QPR1 বা উচ্চতর সহ)
সতর্কতা : Android 15 QPR2 Beta 3 এর সাথে একটি পরিচিত সমস্যার কারণে, Android 15 QPR2 বিটা 3 ইনস্টল করার পরে এবং 16 KB মোডে ডিভাইস বুট করার পরে টাচস্ক্রিন Pixel 8a ডিভাইসে কাজ করে না।
Pixel 9, 9 Pro, এবং 9 Pro XL (Android 15 QPR2 বিটা 2 বা উচ্চতর সহ)
Google Play সামঞ্জস্যের প্রয়োজনীয়তা
যেহেতু ডিভাইস নির্মাতারা পারফরম্যান্স অপ্টিমাইজ করার জন্য ডিভাইসগুলিকে আরও RAM দিয়ে সজ্জিত করে, অনেকেই 16 KB এর মতো বড় পৃষ্ঠার আকার গ্রহণ করবে। এই আসন্ন ডিভাইসগুলির লঞ্চের প্রস্তুতির জন্য, Google Play সমস্ত নতুন অ্যাপের জন্য একটি সামঞ্জস্যের প্রয়োজনীয়তা চালু করেছে এবং বিদ্যমান অ্যাপগুলির আপডেট এবং Android 15+ ডিভাইসগুলিকে 1লা নভেম্বর, 2025 থেকে শুরু করে 16 KB পৃষ্ঠার আকার সমর্থন করতে লক্ষ্য করে।
এই সামঞ্জস্যের প্রয়োজনীয়তা সম্পর্কে আরও পড়তে, এই ব্লগ পোস্টটি দেখুন।
,ঐতিহাসিকভাবে, অ্যান্ড্রয়েড শুধুমাত্র 4 KB মেমরি পৃষ্ঠার আকার সমর্থন করে, যা অ্যান্ড্রয়েড ডিভাইসে সাধারণত থাকা মোট মেমরির গড় পরিমাণের জন্য সিস্টেম মেমরির কার্যকারিতা অপ্টিমাইজ করেছে। অ্যান্ড্রয়েড 15 দিয়ে শুরু করে, AOSP 16 KB (16 KB ডিভাইস) এর পৃষ্ঠার আকার ব্যবহার করার জন্য কনফিগার করা ডিভাইসগুলিকে সমর্থন করে। যদি আপনার অ্যাপটি SDK-এর মাধ্যমে প্রত্যক্ষ বা পরোক্ষভাবে কোনও NDK লাইব্রেরি ব্যবহার করে, তাহলে এই 16 KB ডিভাইসে কাজ করার জন্য আপনাকে আপনার অ্যাপটি পুনর্নির্মাণ করতে হবে।
যেহেতু ডিভাইস নির্মাতারা বৃহত্তর পরিমাণে ভৌত মেমরি (RAM) সহ ডিভাইসগুলি তৈরি করতে থাকে, এই ডিভাইসগুলির মধ্যে অনেকগুলি ডিভাইসের কার্যকারিতা অপ্টিমাইজ করার জন্য 16 KB (এবং শেষ পর্যন্ত আরও বড়) পৃষ্ঠার আকার গ্রহণ করবে। 16 KB পৃষ্ঠার আকারের ডিভাইসগুলির জন্য সমর্থন যোগ করা আপনার অ্যাপটিকে এই ডিভাইসগুলিতে চালানোর জন্য সক্ষম করে এবং আপনার অ্যাপটিকে সংশ্লিষ্ট কর্মক্ষমতা উন্নতি থেকে উপকৃত হতে সাহায্য করে। পুনরায় কম্পাইল না করে, অ্যাপগুলি 16 KB ডিভাইসে কাজ নাও করতে পারে যখন সেগুলি ভবিষ্যতের Android রিলিজে তৈরি করা হয়।
আপনার অ্যাপের জন্য সমর্থন যোগ করতে আপনাকে সাহায্য করার জন্য, আমরা কীভাবে আপনার অ্যাপটি প্রভাবিত হয়েছে কিনা তা পরীক্ষা করতে , কীভাবে আপনার অ্যাপটি পুনর্নির্মাণ করবেন (যদি প্রযোজ্য হয়), এবং কীভাবে এমুলেটর ব্যবহার করে (Android সহ) ব্যবহার করে আপনার অ্যাপটি 16 KB এনভায়রনমেন্টে পরীক্ষা করবেন সে সম্পর্কে নির্দেশিকা প্রদান করেছি। অ্যান্ড্রয়েড এমুলেটরের জন্য 15টি সিস্টেম চিত্র)।
সুবিধা এবং কর্মক্ষমতা লাভ
16 KB পৃষ্ঠার আকারের সাথে কনফিগার করা ডিভাইসগুলি গড়ে সামান্য বেশি মেমরি ব্যবহার করে, তবে সিস্টেম এবং অ্যাপ উভয়ের জন্য বিভিন্ন কর্মক্ষমতা উন্নতিও লাভ করে:
- সিস্টেম মেমরির চাপে থাকাকালীন অ্যাপ লঞ্চের সময় কম: গড়ে 3.16% কম, কিছু অ্যাপের জন্য আরও উল্লেখযোগ্য উন্নতি (30% পর্যন্ত) যা আমরা পরীক্ষা করেছি
- অ্যাপ লঞ্চের সময় পাওয়ার ড্র কম হয়েছে: গড়ে 4.56% হ্রাস
- দ্রুত ক্যামেরা লঞ্চ: গড়ে 4.48% দ্রুত গরম শুরু হয় এবং গড়ে 6.60% দ্রুত ঠান্ডা শুরু হয়
- উন্নত সিস্টেম বুট সময়: গড়ে 8% (প্রায় 950 মিলিসেকেন্ড) দ্বারা উন্নত
এই উন্নতিগুলি আমাদের প্রাথমিক পরীক্ষার উপর ভিত্তি করে করা হয়েছে এবং প্রকৃত ডিভাইসগুলির ফলাফলগুলি সম্ভবত আলাদা হতে পারে৷ আমরা আমাদের পরীক্ষা চালিয়ে যাওয়ার সাথে সাথে অ্যাপগুলির সম্ভাব্য লাভের অতিরিক্ত বিশ্লেষণ প্রদান করব।
আপনার অ্যাপ প্রভাবিত হয়েছে কিনা তা পরীক্ষা করুন
যদি আপনার অ্যাপ কোনো নেটিভ কোড ব্যবহার করে , তাহলে আপনার অ্যাপটিকে 16 KB ডিভাইসের জন্য সমর্থন সহ পুনর্নির্মাণ করা উচিত। যদি আপনি নিশ্চিত না হন যে আপনার অ্যাপটি নেটিভ কোড ব্যবহার করে, তাহলে আপনি APK বিশ্লেষক ব্যবহার করে সনাক্ত করতে পারেন যে কোনও নেটিভ কোড উপস্থিত আছে কিনা এবং তারপরে আপনি যে কোনও ভাগ করা লাইব্রেরির জন্য ELF বিভাগগুলির সারিবদ্ধতা পরীক্ষা করতে পারেন ।
যদি আপনার অ্যাপটি শুধুমাত্র জাভা প্রোগ্রামিং ভাষায় বা কোটলিনে লেখা কোড ব্যবহার করে, যার মধ্যে সব লাইব্রেরি বা SDK সহ, তাহলে আপনার অ্যাপটি ইতিমধ্যেই 16 KB ডিভাইস সমর্থন করে। তবুও, আমরা সুপারিশ করছি যে আপনি অ্যাপের আচরণে কোনো অপ্রত্যাশিত রিগ্রেশন নেই তা যাচাই করতে 16 KB পরিবেশে আপনার অ্যাপটি পরীক্ষা করুন ।
আপনার অ্যাপ কি নেটিভ কোড ব্যবহার করে?
আপনার অ্যাপটি নেটিভ কোড ব্যবহার করে যদি নিচের কোনটি প্রযোজ্য হয়:
- আপনার অ্যাপ যেকোনো C/C++ (নেটিভ) কোড ব্যবহার করে। আপনার অ্যাপ যদি Android NDK ব্যবহার করে, তাহলে আপনার অ্যাপটি নেটিভ কোড ব্যবহার করে।
- আপনার অ্যাপ যেকোন থার্ড-পার্টি নেটিভ লাইব্রেরি বা নির্ভরতা (যেমন SDK) এর সাথে লিঙ্ক করে যা সেগুলি ব্যবহার করে।
- আপনার অ্যাপটি একটি থার্ড-পার্টি অ্যাপ নির্মাতা দ্বারা তৈরি করা হয়েছে যেটি ডিভাইসে নেটিভ লাইব্রেরি ব্যবহার করে।
APK বিশ্লেষক ব্যবহার করে নেটিভ লাইব্রেরি সনাক্ত করুন
APK বিশ্লেষক একটি টুল যা আপনাকে একটি নির্মিত APK এর বিভিন্ন দিক মূল্যায়ন করতে দেয়। আপনার অ্যাপটি নেটিভ কোড ব্যবহার করে কিনা তা পরীক্ষা করতে (এটি 16 KB সামঞ্জস্যপূর্ণ কিনা)
- অ্যান্ড্রয়েড স্টুডিও খুলুন, তারপরে ফাইল > খুলুন ক্লিক করুন এবং যেকোনো প্রকল্প বেছে নিন।
মেনু বার থেকে, Build > Analyze APK... এ ক্লিক করুন।
আপনি বিশ্লেষণ করতে চান এমন APK চয়ন করুন।
lib
ফোল্ডারের মধ্যে দেখুন, যা কোনও উপস্থিত থাকলে শেয়ারড অবজেক্ট (.so
) ফাইলগুলি হোস্ট করে। যদি কোনও ভাগ করা অবজেক্ট ফাইল উপস্থিত থাকে তবে আপনার অ্যাপ্লিকেশনটি নেটিভ কোড ব্যবহার করে। যদি কোনও ভাগ করা অবজেক্ট ফাইল উপস্থিত না থাকে বা কোনওlib
ফোল্ডার না থাকে তবে আপনার অ্যাপ্লিকেশনটি নেটিভ কোড ব্যবহার করে না।
ভাগ করা লাইব্রেরির জন্য ELF বিভাগগুলির প্রান্তিককরণ পরীক্ষা করুন
যে কোনও ভাগ করা লাইব্রেরির জন্য, যাচাই করুন যে ভাগ করা গ্রন্থাগারগুলির ইএলএফ বিভাগগুলি 16 কেবি এলফ সারিবদ্ধকরণ ব্যবহার করে সঠিকভাবে সারিবদ্ধ করা হয়েছে। আপনি যদি লিনাক্স বা ম্যাকোস উভয়ই বিকাশ করছেন তবে আপনি নীচের বিভাগে বর্ণিত হিসাবে check_elf_alignment.sh
স্ক্রিপ্টটি ব্যবহার করতে পারেন। আপনি সরাসরি কমান্ড-লাইন সরঞ্জামগুলি ব্যবহার করতে পারেন।
CHECK_ELF_ALINGMENT.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 বিভাগগুলির প্রান্তিককরণ পরীক্ষা করতে এই পদক্ষেপগুলি অনুসরণ করুন:
- অ্যান্ড্রয়েড এসডিকে বিল্ড-টুলস সংস্করণ 35.0.0 বা তার বেশি উভয়ই নিশ্চিত করুন এবং অ্যান্ড্রয়েড এনডিকে অ্যান্ড্রয়েড স্টুডিও বা
sdkmanager
কমান্ড-লাইন সরঞ্জামে এসডিকে ম্যানেজার ব্যবহার করে ইনস্টল করা হয়েছে। আপনার অ্যাপ্লিকেশনটির APK ফাইলটি বের করুন:
লিনাক্স বা ম্যাকোস
unzip APK_NAME.apk -d /tmp/my_apk_out
উইন্ডোজ (পাওয়ারশেল)
Expand-Archive -Path .\APK_NAME.apk -DestinationPath ~\tmp\my_apk_out
আপনি যে অস্থায়ী ডিরেক্টরিতে আপনার এপিকে ফাইলটি বের করেছেন, তাতে শেয়ার্ড অবজেক্ট (
.so
) ফাইলগুলির জন্যlib
ডিরেক্টরিটির সামগ্রীগুলি পরীক্ষা করুন। এগুলি একই ভাগ করা অবজেক্ট ফাইল যা আপনি এপিকে বিশ্লেষক ব্যবহার করে স্থানীয় গ্রন্থাগারগুলি সনাক্ত করার সময় দেখেছিলেন। প্রতিটি ভাগ করা অবজেক্ট ফাইলে নিম্নলিখিত কমান্ডটি চালান:লিনাক্স বা ম্যাকোস
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
ডিরেক্টরিটির পথ যেখানে আপনি অ্যান্ড্রয়েড এসডিকে ইনস্টল করেছেন,SHARED_OBJECT_FILE
আপনি যে শেয়ার্ড অবজেক্ট ফাইলটি যাচাই করছেন তার নাম, এবংNDK_VERSION
হ'ল অ্যান্ড্রয়েড এনডিকে যা আপনি ইনস্টল করেছেন (উদাহরণস্বরূপ,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
বা নিম্ন মান হয় তবে আপনাকে সেই লাইব্রেরিগুলির জন্য প্যাকেজিং আপডেট করতে হবে, তারপরে আপনার অ্যাপ্লিকেশনটি পুনরায় সংকলন করুন এবং এই বিভাগের পদক্ষেপগুলি অনুসরণ করে পুনরায় পরীক্ষা করুন।এরপরে, আপনার অ্যাপের এপিকে ফাইলটিতে
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
আউটপুটটির শেষ লাইনটি "যাচাইকরণ সফল" বলবে যদি ভাগ করা সমস্ত লাইব্রেরি সঠিকভাবে সারিবদ্ধ হয়।যদি যাচাইকরণ ব্যর্থ হয়, কিছু ভাগ করা গ্রন্থাগারগুলি পুনরায় চালু করা দরকার, সুতরাং আপনাকে সেই গ্রন্থাগারগুলির জন্য প্যাকেজিং আপডেট করতে হবে, তারপরে আপনার অ্যাপ্লিকেশনটি পুনরায় সংকলন করুন এবং এই বিভাগের পদক্ষেপগুলি অনুসরণ করে পুনরায় পরীক্ষা করুন।
16 কেবি ডিভাইসের জন্য সমর্থন সহ আপনার অ্যাপ্লিকেশনটি তৈরি করুন
যদি আপনার অ্যাপ্লিকেশনটি নেটিভ কোড ব্যবহার করে, তবে আপনার অ্যাপ্লিকেশনটি 16 কেবি ডিভাইসগুলিকে সমর্থন করে কিনা তা নিশ্চিত করার জন্য নিম্নলিখিত বিভাগগুলিতে বর্ণিত পদক্ষেপগুলি সম্পূর্ণ করুন:
- আপনার ভাগ করা লাইব্রেরিগুলির প্যাকেজিং আপডেট করুন
- 16 কেবি এলফ প্রান্তিককরণ ব্যবহার করে আপনার অ্যাপ্লিকেশনটি সংকলন করুন
- কোড ঠিক করুন এবং রানটাইম সমস্যাগুলি সমাধান করুন
- 16 কেবি সমর্থনের জন্য এসডিকে চেক করুন
আপনার ভাগ করা লাইব্রেরিগুলির প্যাকেজিং আপডেট করুন
আমরা আপনাকে সুপারিশ করি যে আপনি এজিপি সংস্করণ 8.5.1 বা উচ্চতর আপগ্রেড করুন এবং সঙ্কুচিত ভাগ করা লাইব্রেরি ব্যবহার করুন।
এজিপি সংস্করণ 8.5.1 বা উচ্চতর
১ Kb এটি করার জন্য, আপনাকে অ্যান্ড্রয়েড গ্রেডল প্লাগইন (এজিপি) সংস্করণ 8.5.1 বা তার বেশি আপগ্রেড করতে হবে। আপগ্রেড প্রক্রিয়া সম্পর্কিত বিশদগুলির জন্য অ্যান্ড্রয়েড গ্রেডল প্লাগইন আপগ্রেড সহকারী বিভাগটি দেখুন।
এজিপি সংস্করণ 8.5 বা তার চেয়ে কম
আপনি যদি এজিপিকে 8.5.1 বা তার বেশি সংস্করণে আপগ্রেড করতে না পারেন তবে বিকল্পটি হ'ল সংকুচিত ভাগ করা লাইব্রেরি ব্যবহার করতে স্যুইচ করা। স্বীকৃত শেয়ার্ড লাইব্রেরিগুলির সাথে অ্যাপ ইনস্টলেশন সমস্যাগুলি এড়াতে আপনার অ্যাপ্লিকেশনটি প্যাকেজ করার সময় আপনার ভাগ করা লাইব্রেরিগুলিকে গ্রেড করার জন্য আপনার গ্রেডল কনফিগারেশন আপডেট করুন।
গ্রোভি
আপনার build.gradle
ফাইলে, নিম্নলিখিত বিকল্পটি যুক্ত করুন:
android {
...
packagingOptions {
jniLibs {
useLegacyPackaging true
}
}
}
কোটলিন
আপনার build.gradle.kts
ফাইলে, নিম্নলিখিত বিকল্পটি যুক্ত করুন:
android {
...
packagingOptions {
jniLibs {
useLegacyPackaging = true
}
}
}
16 কেবি এলফ প্রান্তিককরণ ব্যবহার করে আপনার অ্যাপ্লিকেশনটি সংকলন করুন
16 কেবি ডিভাইসগুলির জন্য আপনার অ্যাপ্লিকেশনটি চালানোর জন্য 16 কেবি এলফ সারিবদ্ধকরণ ব্যবহার করে ভাগ করে নেওয়া লাইব্রেরির ইএলএফ বিভাগগুলি সঠিকভাবে সারিবদ্ধ করা প্রয়োজন।
গেম বিকাশকারীদের জন্য, যদি আপনার গেমটি ইউনিটি গেম ইঞ্জিনের শীর্ষে চলে, তবে ইউনিটি গাইডটি উল্লেখ করুন। যদি আপনার গেমটি অবাস্তব গেম ইঞ্জিনের শীর্ষে চলে তবে অবাস্তব গাইডটি দেখুন। নেটিভ গেম ইঞ্জিনগুলির জন্য, এই গাইডটি দিয়ে চালিয়ে যান।
আপনার অ্যাপ্লিকেশনটি 16 কেবি এলফ সারিবদ্ধকরণ ব্যবহার করে সংকলন করতে, আপনি যে অ্যান্ড্রয়েড এনডিকে ব্যবহার করছেন তার সংস্করণটির উপর নির্ভর করে নিম্নলিখিত বিভাগগুলির একটিতে পদক্ষেপগুলি সম্পূর্ণ করুন।
অ্যান্ড্রয়েড এনডিকে আর 28 এবং উচ্চতর
এনডিকে সংস্করণ আর 28 এবং উচ্চতর সংকলন 16 কেবি-ডিফল্টরূপে সংযুক্ত।
অ্যান্ড্রয়েড এনডিকে আর 27
অ্যান্ড্রয়েড এনডিকে সংস্করণ আর 27 এবং উচ্চতর সহ 16 কেবি-সংযুক্ত শেয়ার্ড লাইব্রেরি সংকলন সমর্থন করার জন্য আপনাকে আপনার ndk-build
, build.gradle
, build.gradle.kts
বা লিঙ্কার পতাকাগুলি নিম্নরূপে আপডেট করতে হবে:
ndk-বিল্ড
আপনার 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
অ্যান্ড্রয়েড এনডিকে আর 26 এবং লোয়ার
অ্যান্ড্রয়েড এনডিকে সংস্করণ আর 26 বা তার চেয়ে কম 16 কেবি-সংযুক্ত শেয়ার্ড লাইব্রেরি সংকলন সমর্থন করার জন্য আপনাকে আপনার ndk-build
বা cmake
কনফিগারেশন আপডেট করতে হবে:
ndk-বিল্ড
16 কেবি এলফ সারিবদ্ধকরণ সক্ষম করতে আপনার Android.mk
আপডেট করুন:
LOCAL_LDFLAGS += "-Wl,-z,max-page-size=16384"
সিমেক
16 কেবি এলফ সারিবদ্ধকরণ সক্ষম করতে আপনার CMakeLists.txt
আপডেট করুন:
target_link_options(${CMAKE_PROJECT_NAME} PRIVATE "-Wl,-z,max-page-size=16384")
কোড ঠিক করুন এবং রানটাইম সমস্যাগুলি সমাধান করুন
এমনকি যদি আপনার অ্যাপ্লিকেশনটি 16 কেবি-সংযুক্ত থাকে তবে আপনার কোডের স্থানগুলি যদি ধরে নেয় যে কোনও ডিভাইস একটি নির্দিষ্ট পৃষ্ঠার আকার ব্যবহার করছে তবে আপনার অ্যাপ্লিকেশনটি ত্রুটির মুখোমুখি হতে পারে। এটি এড়াতে, নিম্নলিখিত পদক্ষেপগুলি সম্পূর্ণ করুন:
আপনার কোড যুক্তিতে
PAGE_SIZE
ধ্রুবক বা দৃষ্টান্তগুলি উল্লেখ করে এমন কোনও হার্ড-কোডেড নির্ভরতাগুলি সরান যা ধরে নেয় যে কোনও ডিভাইসের পৃষ্ঠার আকার 4 কেবি (4096
)।পরিবর্তে
getpagesize()
বাsysconf(_SC_PAGESIZE)
ব্যবহার করুন।mmap()
এবং অন্যান্য এপিআইগুলির ব্যবহারগুলি সন্ধান করুন যার জন্য পৃষ্ঠা-সংযুক্ত যুক্তিগুলির প্রয়োজন হয় এবং প্রয়োজনীয় বিকল্পগুলির সাথে প্রতিস্থাপন করুন।
কিছু ক্ষেত্রে, যদি আপনার অ্যাপ্লিকেশনটি PAGE_SIZE
একটি সুবিধাজনক মান হিসাবে ব্যবহার করে যা অন্তর্নিহিত পৃষ্ঠার আকারের সাথে আবদ্ধ নয়, তবে এটি 16 কেবি মোডে ব্যবহার করার সময় আপনার অ্যাপ্লিকেশনটি ভেঙে ফেলবে না। তবে, যদি এই মানটি mmap
দিয়ে MAP_FIXED
ছাড়াই কার্নেলের কাছে প্রেরণ করা হয় তবে কার্নেলটি এখনও একটি সম্পূর্ণ পৃষ্ঠা ব্যবহার করে, যা কিছু মেমরি নষ্ট করে। এই কারণে, NDK আর 27 এবং উচ্চতর 16 কেবি মোড সক্ষম করা হলে PAGE_SIZE
অপরিজ্ঞাত হয়।
যদি আপনার অ্যাপ্লিকেশনটি এইভাবে PAGE_SIZE
ব্যবহার করে এবং এই মানটি সরাসরি কার্নেলের কাছে প্রেরণ করে না, তবে PAGE_SIZE
ব্যবহার না করে, এটি অন্য উদ্দেশ্যে ব্যবহৃত হয় এবং এটি একটি বাস্তব মেমরি পৃষ্ঠা প্রতিফলিত করে না তা প্রতিফলিত করার জন্য একটি নতুন নাম সহ একটি নতুন ভেরিয়েবল তৈরি করুন।
16 কেবি সমর্থনের জন্য এসডিকে চেক করুন
অনেক এসডিকে 16 কেবি পৃষ্ঠার আকারের সাথে সামঞ্জস্যপূর্ণ, বিশেষত যদি আপনি সেগুলি নিজেই তৈরি করেন বা সাম্প্রতিক প্রাক -স্রোতগুলি পান। তবে, যেহেতু কিছু এসডিকে প্রিবিল্টস বা এসডিকে সংস্করণগুলি 16 কেবি সামঞ্জস্যপূর্ণ নয়, তাই 16 কেবি দিয়ে কোন সংস্করণটি ব্যবহার করবেন তা নির্ধারণ করতে আপনার প্রতিটি এসডিকে সরবরাহকারীর জন্য ওয়েবসাইটটি পরীক্ষা করা উচিত।
একটি 16 কেবি পরিবেশে আপনার অ্যাপ্লিকেশন পরীক্ষা করুন
আপনি 16 কেবি ডিভাইসের জন্য সমর্থন সহ আপনার অ্যাপটি তৈরি করার পরে, আপনার অ্যাপ্লিকেশনটি কোনও রিগ্রেশন অনুভব করে কিনা তা দেখতে আপনি 16 কেবি পরিবেশে আপনার অ্যাপ্লিকেশনটি পরীক্ষা করতে চাইবেন। এটি করার জন্য, এই পদক্ষেপগুলি অনুসরণ করুন:
নিম্নলিখিত পরীক্ষার পরিবেশগুলির একটি সেট আপ করুন:
আপনার পরীক্ষার ডিভাইসটি শুরু করুন, তারপরে এটি 16 কেবি পরিবেশ ব্যবহার করছে কিনা তা যাচাই করতে নিম্নলিখিত কমান্ডটি চালান:
adb shell getconf PAGE_SIZE
কমান্ডটি
16384
এর একটি মান ফেরত দেওয়া উচিত।আপনার অ্যাপ্লিকেশনটি 16 কেবি-প্রান্তিকযুক্ত কিনা তা যাচাই করতে নিম্নলিখিত
zipalign
কমান্ডটি চালান, যেখানে APK_NAME আপনার অ্যাপের এপিকে ফাইলের নাম:zipalign -c -P 16 -v 4 APK_NAME.apk
নির্দিষ্ট পৃষ্ঠার আকারগুলি উল্লেখ করে এমন কোডের উদাহরণগুলি পরিবর্তিত করে প্রভাবিত হতে পারে এমন কোনও ক্ষেত্রের উপর দৃষ্টি নিবদ্ধ করে আপনার অ্যাপ্লিকেশনটিকে পুরোপুরি পরীক্ষা করুন।
16-কেবি-ভিত্তিক, অ্যান্ড্রয়েড 15 সিস্টেম চিত্র সহ অ্যান্ড্রয়েড এমুলেটর সেট আপ করুন
অ্যান্ড্রয়েড এমুলেটর ব্যবহার করে একটি 16 কেবি পরিবেশ সেট আপ করতে, এই পদক্ষেপগুলি অনুসরণ করুন:
16-কেবি-ভিত্তিক, অ্যান্ড্রয়েড 15 এমুলেটর সিস্টেম চিত্রগুলি অ্যান্ড্রয়েড স্টুডিও জেলিফিশের সাথে সামঞ্জস্যপূর্ণ | 2023.3.1 বা উচ্চতর। তবে, 16 কেবি ডিভাইসের সাথে কাজ করার সময় সেরা অভিজ্ঞতার জন্য, অ্যান্ড্রয়েড স্টুডিও লেডিবাগ ব্যবহার করুন | 2024.2.1 বা উচ্চতর।
আমরা সর্বদা নতুন বৈশিষ্ট্যগুলিতে কাজ করছি, সুতরাং নতুন সংস্করণগুলি বা অ্যান্ড্রয়েড স্টুডিওর সর্বশেষ পূর্বরূপ সংস্করণটি উপলব্ধ হওয়ার সাথে সাথে ডাউনলোড করার বিষয়টি বিবেচনা করুন।
মনে রাখবেন যে আপনি অ্যান্ড্রয়েড স্টুডিওর আপনার বিদ্যমান সংস্করণটি ইনস্টল রাখতে পারেন, কারণ আপনি পাশাপাশি একাধিক সংস্করণ ইনস্টল করতে পারেন।
অ্যান্ড্রয়েড স্টুডিওতে, সরঞ্জামগুলি> এসডিকে ম্যানেজার ক্লিক করুন।
এসডিকে প্ল্যাটফর্ম ট্যাবে, প্যাকেজের বিশদগুলি দেখান , তারপরে অ্যান্ড্রয়েড ভ্যানিলাইক্রিম বা উচ্চতর বিভাগটি প্রসারিত করুন এবং আপনি তৈরি করতে চান ভার্চুয়াল ডিভাইসগুলির উপর নির্ভর করে নিম্নলিখিত এমুলেটর সিস্টেম চিত্রগুলির একটি বা উভয় নির্বাচন করুন:
- গুগল এপিআই পরীক্ষামূলক 16 কেবি পৃষ্ঠার আকার আর্ম 64 ভি 8 এ সিস্টেম চিত্র
- গুগল এপিআই পরীক্ষামূলক 16 কেবি পৃষ্ঠার আকার ইন্টেল x86_64 অ্যাটম সিস্টেম চিত্র
আপনি নির্বাচিত যে কোনও সিস্টেম চিত্র ডাউনলোড করতে প্রয়োগ করুন> ওকে ক্লিক করুন।
অ্যান্ড্রয়েড 15 এর জন্য ভার্চুয়াল ডিভাইস সেট আপ করার পদক্ষেপগুলি অনুসরণ করুন এবং যখন কোনও সিস্টেম চিত্র নির্বাচন করার জন্য অনুরোধ জানানো হয়, আপনি ডাউনলোড করেছেন এমন 16 কেবি সিস্টেম চিত্র নির্বাচন করুন। যদি এটি স্বয়ংক্রিয়ভাবে প্রস্তাবিত না হয় তবে আপনি অন্যান্য চিত্র ট্যাবে 16 কেবি সিস্টেম চিত্রটি খুঁজে পেতে পারেন।
কিছু এমুলেটর সংস্করণ এবং সিস্টেম চিত্রগুলির জন্য অতিরিক্ত পদক্ষেপ
অ্যান্ড্রয়েড এমুলেটর সংস্করণগুলির জন্য 35.1.5 এর মাধ্যমে 35.1.20 এর জন্য, এবং এসডিকে ম্যানেজারে দেওয়া অ্যান্ড্রয়েড 15.0 16 কেবি পৃষ্ঠার আকারের সিস্টেম চিত্রগুলির সংশোধন 4 এর আগে, x86_64 সিস্টেমে 16 কেবি পরিবেশের অনুকরণ করতে আপনাকে নিম্নলিখিত পদক্ষেপগুলিও সম্পূর্ণ করতে হবে। এই পদক্ষেপগুলি 35.1.21 সংস্করণটির পরে এবং অ্যান্ড্রয়েডের 15.0 16 কেবি পৃষ্ঠার আকারের সিস্টেমের চিত্র বা তার পরে সংশোধন 4 এর পরে প্রয়োজন হয় না।
- ডিভাইস ম্যানেজারে, 16 কেবি চিত্রের পাশের 3 টি বিন্দুতে ক্লিক করুন, তারপরে ডিস্কে শো ক্লিক করুন।
- এই ফোল্ডারে,
config.ini
ফাইলটি সন্ধান করুন। config.ini
ফাইলটিতে নিম্নলিখিত লাইনটি যুক্ত করুন এবং আপনার পরিবর্তনগুলি সংরক্ষণ করুন:kernel.parameters = androidboot.page_shift=14
আপনার পরিবর্তনগুলি যাচাই করতে, নিম্নলিখিত কমান্ডটি চালান, যা
16384
ফিরে আসা উচিত:adb shell getconf PAGE_SIZE
এমুলেটর চালু করুন
আপনি অ্যান্ড্রয়েড এমুলেটর এবং ভার্চুয়াল ডিভাইসগুলি সেটআপ শেষ করার পরে, লক্ষ্য ডিভাইস মেনু থেকে বা কমান্ড লাইন থেকে এমুলেটরটি চালু করুন।
বিকাশকারী বিকল্পগুলি ব্যবহার করে একটি ডিভাইসে 16 KB মোড সক্ষম করুন৷

16 KB মোডে একটি ডিভাইস বুট করতে 16KB পৃষ্ঠা আকারের বিকাশকারী বিকল্পের সাথে বুটটি টগল করুন।
Android 15 QPR1 দিয়ে শুরু করে, আপনি ডিভাইসটিকে 16 KB মোডে বুট করতে এবং ডিভাইসে পরীক্ষা করার জন্য নির্দিষ্ট ডিভাইসে উপলব্ধ ডেভেলপার বিকল্পটি ব্যবহার করতে পারেন। বিকাশকারী বিকল্পটি ব্যবহার করার আগে, সেটিংস -> সিস্টেম -> সফ্টওয়্যার আপডেটগুলিতে যান এবং উপলব্ধ যে কোনও আপডেট প্রয়োগ করুন৷
এই বিকাশকারী বিকল্পটি নিম্নলিখিত ডিভাইসগুলিতে উপলব্ধ:
Pixel 8 এবং 8 Pro (Android 15 QPR1 বা উচ্চতর সহ)
সতর্কতা : Android 15 QPR2 Beta 3 এর সাথে একটি পরিচিত সমস্যার কারণে, Android 15 QPR2 বিটা 3 ইনস্টল করার পরে এবং 16 KB মোডে ডিভাইস বুট করার পরে টাচস্ক্রিন Pixel 8 ডিভাইসে কাজ করে না। এই সমস্যাটি Pixel 8 Pro ডিভাইসগুলিকে প্রভাবিত করে না।
Pixel 8a (Android 15 QPR1 বা উচ্চতর সহ)
সতর্কতা : Android 15 QPR2 Beta 3 এর সাথে একটি পরিচিত সমস্যার কারণে, Android 15 QPR2 বিটা 3 ইনস্টল করার পরে এবং 16 KB মোডে ডিভাইস বুট করার পরে টাচস্ক্রিন Pixel 8a ডিভাইসে কাজ করে না।
Pixel 9, 9 Pro, এবং 9 Pro XL (Android 15 QPR2 বিটা 2 বা উচ্চতর সহ)
গুগল প্লে সামঞ্জস্যতা প্রয়োজন
যেহেতু ডিভাইস নির্মাতারা পারফরম্যান্স অনুকূল করতে আরও বেশি র্যাম দিয়ে ডিভাইসগুলি সজ্জিত করে, অনেকে 16 কেবি এর মতো বৃহত্তর পৃষ্ঠার আকার গ্রহণ করবেন। এই আসন্ন ডিভাইসগুলির প্রবর্তন প্রস্তুত করতে, গুগল প্লে বিদ্যমান অ্যাপ্লিকেশনগুলিতে সমস্ত নতুন অ্যাপ্লিকেশন এবং আপডেটগুলির জন্য একটি সামঞ্জস্যতা প্রয়োজনীয়তা চালু করা হয়েছে এবং অ্যান্ড্রয়েড 15+ ডিভাইসগুলিকে লক্ষ্য করে 1 নভেম্বর, 2025 থেকে শুরু করে 16 কেবি পৃষ্ঠার আকারগুলি সমর্থন করার জন্য।
এই সামঞ্জস্যতার প্রয়োজনীয়তা সম্পর্কে আরও পড়তে, এই ব্লগ পোস্টটি দেখুন।
,ঐতিহাসিকভাবে, অ্যান্ড্রয়েড শুধুমাত্র 4 KB মেমরি পৃষ্ঠার আকার সমর্থন করে, যা অ্যান্ড্রয়েড ডিভাইসে সাধারণত থাকা মোট মেমরির গড় পরিমাণের জন্য সিস্টেম মেমরির কার্যকারিতা অপ্টিমাইজ করেছে। অ্যান্ড্রয়েড 15 দিয়ে শুরু করে, AOSP 16 KB (16 KB ডিভাইস) এর পৃষ্ঠার আকার ব্যবহার করার জন্য কনফিগার করা ডিভাইসগুলিকে সমর্থন করে। যদি আপনার অ্যাপটি SDK-এর মাধ্যমে প্রত্যক্ষ বা পরোক্ষভাবে কোনও NDK লাইব্রেরি ব্যবহার করে, তাহলে এই 16 KB ডিভাইসে কাজ করার জন্য আপনাকে আপনার অ্যাপটি পুনর্নির্মাণ করতে হবে।
যেহেতু ডিভাইস নির্মাতারা বৃহত্তর পরিমাণে ভৌত মেমরি (RAM) সহ ডিভাইসগুলি তৈরি করতে থাকে, এই ডিভাইসগুলির মধ্যে অনেকগুলি ডিভাইসের কার্যকারিতা অপ্টিমাইজ করার জন্য 16 KB (এবং শেষ পর্যন্ত আরও বড়) পৃষ্ঠার আকার গ্রহণ করবে। 16 KB পৃষ্ঠার আকারের ডিভাইসগুলির জন্য সমর্থন যোগ করা আপনার অ্যাপটিকে এই ডিভাইসগুলিতে চালানোর জন্য সক্ষম করে এবং আপনার অ্যাপটিকে সংশ্লিষ্ট কর্মক্ষমতা উন্নতি থেকে উপকৃত হতে সাহায্য করে। পুনরায় কম্পাইল না করে, অ্যাপগুলি 16 KB ডিভাইসে কাজ নাও করতে পারে যখন সেগুলি ভবিষ্যতের Android রিলিজে তৈরি করা হয়।
আপনার অ্যাপের জন্য সমর্থন যোগ করতে আপনাকে সাহায্য করার জন্য, আমরা কীভাবে আপনার অ্যাপটি প্রভাবিত হয়েছে কিনা তা পরীক্ষা করতে , কীভাবে আপনার অ্যাপটি পুনর্নির্মাণ করবেন (যদি প্রযোজ্য হয়), এবং কীভাবে এমুলেটর ব্যবহার করে (Android সহ) ব্যবহার করে আপনার অ্যাপটি 16 KB এনভায়রনমেন্টে পরীক্ষা করবেন সে সম্পর্কে নির্দেশিকা প্রদান করেছি। অ্যান্ড্রয়েড এমুলেটরের জন্য 15টি সিস্টেম চিত্র)।
সুবিধা এবং কর্মক্ষমতা লাভ
16 KB পৃষ্ঠার আকারের সাথে কনফিগার করা ডিভাইসগুলি গড়ে সামান্য বেশি মেমরি ব্যবহার করে, তবে সিস্টেম এবং অ্যাপ উভয়ের জন্য বিভিন্ন কর্মক্ষমতা উন্নতিও লাভ করে:
- সিস্টেম মেমরির চাপে থাকাকালীন অ্যাপ লঞ্চের সময় কম: গড়ে 3.16% কম, কিছু অ্যাপের জন্য আরও উল্লেখযোগ্য উন্নতি (30% পর্যন্ত) যা আমরা পরীক্ষা করেছি
- অ্যাপ লঞ্চের সময় পাওয়ার ড্র কম হয়েছে: গড়ে 4.56% হ্রাস
- দ্রুত ক্যামেরা লঞ্চ: গড়ে 4.48% দ্রুত গরম শুরু হয় এবং গড়ে 6.60% দ্রুত ঠান্ডা শুরু হয়
- উন্নত সিস্টেম বুট সময়: গড়ে 8% (প্রায় 950 মিলিসেকেন্ড) দ্বারা উন্নত
এই উন্নতিগুলি আমাদের প্রাথমিক পরীক্ষার উপর ভিত্তি করে করা হয়েছে এবং প্রকৃত ডিভাইসগুলির ফলাফলগুলি সম্ভবত আলাদা হতে পারে৷ আমরা আমাদের পরীক্ষা চালিয়ে যাওয়ার সাথে সাথে অ্যাপগুলির সম্ভাব্য লাভের অতিরিক্ত বিশ্লেষণ প্রদান করব।
আপনার অ্যাপ্লিকেশন প্রভাবিত হয়েছে কিনা তা পরীক্ষা করুন
যদি আপনার অ্যাপ কোনো নেটিভ কোড ব্যবহার করে , তাহলে আপনার অ্যাপটিকে 16 KB ডিভাইসের জন্য সমর্থন সহ পুনর্নির্মাণ করা উচিত। যদি আপনি নিশ্চিত না হন যে আপনার অ্যাপটি নেটিভ কোড ব্যবহার করে, তাহলে আপনি APK বিশ্লেষক ব্যবহার করে সনাক্ত করতে পারেন যে কোনও নেটিভ কোড উপস্থিত আছে কিনা এবং তারপরে আপনি যে কোনও ভাগ করা লাইব্রেরির জন্য ELF বিভাগগুলির সারিবদ্ধতা পরীক্ষা করতে পারেন ।
যদি আপনার অ্যাপটি শুধুমাত্র জাভা প্রোগ্রামিং ভাষায় বা কোটলিনে লেখা কোড ব্যবহার করে, যার মধ্যে সব লাইব্রেরি বা SDK সহ, তাহলে আপনার অ্যাপটি ইতিমধ্যেই 16 KB ডিভাইস সমর্থন করে। তবুও, আমরা সুপারিশ করছি যে আপনি অ্যাপের আচরণে কোনো অপ্রত্যাশিত রিগ্রেশন নেই তা যাচাই করতে 16 KB পরিবেশে আপনার অ্যাপটি পরীক্ষা করুন ।
আপনার অ্যাপ্লিকেশনটি নেটিভ কোড ব্যবহার করে?
নিম্নলিখিতগুলির মধ্যে যদি কোনও প্রয়োগ হয় তবে আপনার অ্যাপ্লিকেশনটি নেটিভ কোড ব্যবহার করে:
- আপনার অ্যাপ্লিকেশনটি কোনও সি/সি ++ (নেটিভ) কোড ব্যবহার করে। যদি আপনার অ্যাপ্লিকেশনটি অ্যান্ড্রয়েড এনডিকে ব্যবহার করে তবে আপনার অ্যাপ্লিকেশনটি নেটিভ কোড ব্যবহার করে।
- আপনার অ্যাপ্লিকেশনটি কোনও তৃতীয় পক্ষের নেটিভ লাইব্রেরি বা নির্ভরতা (যেমন এসডিকে) এর সাথে লিঙ্ক করে যা সেগুলি ব্যবহার করে।
- আপনার অ্যাপ্লিকেশনটি একটি তৃতীয় পক্ষের অ্যাপ নির্মাতা দ্বারা নির্মিত যা ডিভাইসে নেটিভ লাইব্রেরি ব্যবহার করে।
এপিকে বিশ্লেষক ব্যবহার করে দেশীয় গ্রন্থাগারগুলি সনাক্ত করুন
এপিকে বিশ্লেষক এমন একটি সরঞ্জাম যা আপনাকে একটি বিল্ট এপিকে বিভিন্ন দিক মূল্যায়ন করতে দেয়। আপনার অ্যাপ্লিকেশনটি নেটিভ কোড ব্যবহার করে কিনা তা পরীক্ষা করতে (এটি 16 কেবি সামঞ্জস্যপূর্ণ কিনা তা নির্বিশেষে):
- অ্যান্ড্রয়েড স্টুডিও খুলুন, তারপরে ফাইল> খুলুন ক্লিক করুন এবং যে কোনও প্রকল্প চয়ন করুন।
মেনু বার থেকে, বিল্ড> এপিকে বিশ্লেষণ করুন ক্লিক করুন ...
আপনি বিশ্লেষণ করতে চান এমন APK চয়ন করুন।
lib
ফোল্ডারের মধ্যে দেখুন, যা কোনও উপস্থিত থাকলে শেয়ারড অবজেক্ট (.so
) ফাইলগুলি হোস্ট করে। যদি কোনও ভাগ করা অবজেক্ট ফাইল উপস্থিত থাকে তবে আপনার অ্যাপ্লিকেশনটি নেটিভ কোড ব্যবহার করে। যদি কোনও ভাগ করা অবজেক্ট ফাইল উপস্থিত না থাকে বা কোনওlib
ফোল্ডার না থাকে তবে আপনার অ্যাপ্লিকেশনটি নেটিভ কোড ব্যবহার করে না।
ভাগ করা লাইব্রেরির জন্য ELF বিভাগগুলির প্রান্তিককরণ পরীক্ষা করুন
যে কোনও ভাগ করা লাইব্রেরির জন্য, যাচাই করুন যে ভাগ করা গ্রন্থাগারগুলির ইএলএফ বিভাগগুলি 16 কেবি এলফ সারিবদ্ধকরণ ব্যবহার করে সঠিকভাবে সারিবদ্ধ করা হয়েছে। আপনি যদি লিনাক্স বা ম্যাকোস উভয়ই বিকাশ করছেন তবে আপনি নীচের বিভাগে বর্ণিত হিসাবে check_elf_alignment.sh
স্ক্রিপ্টটি ব্যবহার করতে পারেন। আপনি সরাসরি কমান্ড-লাইন সরঞ্জামগুলি ব্যবহার করতে পারেন।
CHECK_ELF_ALINGMENT.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 বিভাগগুলির প্রান্তিককরণ পরীক্ষা করতে এই পদক্ষেপগুলি অনুসরণ করুন:
- অ্যান্ড্রয়েড এসডিকে বিল্ড-টুলস সংস্করণ 35.0.0 বা তার বেশি উভয়ই নিশ্চিত করুন এবং অ্যান্ড্রয়েড এনডিকে অ্যান্ড্রয়েড স্টুডিও বা
sdkmanager
কমান্ড-লাইন সরঞ্জামে এসডিকে ম্যানেজার ব্যবহার করে ইনস্টল করা হয়েছে। আপনার অ্যাপ্লিকেশনটির APK ফাইলটি বের করুন:
লিনাক্স বা ম্যাকোস
unzip APK_NAME.apk -d /tmp/my_apk_out
উইন্ডোজ (পাওয়ারশেল)
Expand-Archive -Path .\APK_NAME.apk -DestinationPath ~\tmp\my_apk_out
আপনি যে অস্থায়ী ডিরেক্টরিতে আপনার এপিকে ফাইলটি বের করেছেন, তাতে শেয়ার্ড অবজেক্ট (
.so
) ফাইলগুলির জন্যlib
ডিরেক্টরিটির সামগ্রীগুলি পরীক্ষা করুন। এগুলি একই ভাগ করা অবজেক্ট ফাইল যা আপনি এপিকে বিশ্লেষক ব্যবহার করে স্থানীয় গ্রন্থাগারগুলি সনাক্ত করার সময় দেখেছিলেন। প্রতিটি ভাগ করা অবজেক্ট ফাইলে নিম্নলিখিত কমান্ডটি চালান:লিনাক্স বা ম্যাকোস
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
ডিরেক্টরিটির পথ যেখানে আপনি অ্যান্ড্রয়েড এসডিকে ইনস্টল করেছেন,SHARED_OBJECT_FILE
আপনি যে শেয়ার্ড অবজেক্ট ফাইলটি যাচাই করছেন তার নাম, এবংNDK_VERSION
হ'ল অ্যান্ড্রয়েড এনডিকে যা আপনি ইনস্টল করেছেন (উদাহরণস্বরূপ,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
বা নিম্ন মান হয় তবে আপনাকে সেই লাইব্রেরিগুলির জন্য প্যাকেজিং আপডেট করতে হবে, তারপরে আপনার অ্যাপ্লিকেশনটি পুনরায় সংকলন করুন এবং এই বিভাগের পদক্ষেপগুলি অনুসরণ করে পুনরায় পরীক্ষা করুন।এরপরে, আপনার অ্যাপের এপিকে ফাইলটিতে
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
আউটপুটটির শেষ লাইনটি "যাচাইকরণ সফল" বলবে যদি ভাগ করা সমস্ত লাইব্রেরি সঠিকভাবে সারিবদ্ধ হয়।যদি যাচাইকরণ ব্যর্থ হয়, কিছু ভাগ করা গ্রন্থাগারগুলি পুনরায় চালু করা দরকার, সুতরাং আপনাকে সেই গ্রন্থাগারগুলির জন্য প্যাকেজিং আপডেট করতে হবে, তারপরে আপনার অ্যাপ্লিকেশনটি পুনরায় সংকলন করুন এবং এই বিভাগের পদক্ষেপগুলি অনুসরণ করে পুনরায় পরীক্ষা করুন।
16 কেবি ডিভাইসের জন্য সমর্থন সহ আপনার অ্যাপ্লিকেশনটি তৈরি করুন
যদি আপনার অ্যাপ্লিকেশনটি নেটিভ কোড ব্যবহার করে, তবে আপনার অ্যাপ্লিকেশনটি 16 কেবি ডিভাইসগুলিকে সমর্থন করে কিনা তা নিশ্চিত করার জন্য নিম্নলিখিত বিভাগগুলিতে বর্ণিত পদক্ষেপগুলি সম্পূর্ণ করুন:
- আপনার ভাগ করা লাইব্রেরিগুলির প্যাকেজিং আপডেট করুন
- 16 কেবি এলফ প্রান্তিককরণ ব্যবহার করে আপনার অ্যাপ্লিকেশনটি সংকলন করুন
- কোড ঠিক করুন এবং রানটাইম সমস্যাগুলি সমাধান করুন
- 16 কেবি সমর্থনের জন্য এসডিকে চেক করুন
আপনার ভাগ করা লাইব্রেরিগুলির প্যাকেজিং আপডেট করুন
আমরা আপনাকে সুপারিশ করি যে আপনি এজিপি সংস্করণ 8.5.1 বা উচ্চতর আপগ্রেড করুন এবং সঙ্কুচিত ভাগ করা লাইব্রেরি ব্যবহার করুন।
এজিপি সংস্করণ 8.5.1 বা উচ্চতর
১ Kb এটি করার জন্য, আপনাকে অ্যান্ড্রয়েড গ্রেডল প্লাগইন (এজিপি) সংস্করণ 8.5.1 বা তার বেশি আপগ্রেড করতে হবে। আপগ্রেড প্রক্রিয়া সম্পর্কিত বিশদগুলির জন্য অ্যান্ড্রয়েড গ্রেডল প্লাগইন আপগ্রেড সহকারী বিভাগটি দেখুন।
এজিপি সংস্করণ 8.5 বা তার চেয়ে কম
আপনি যদি এজিপিকে 8.5.1 বা তার বেশি সংস্করণে আপগ্রেড করতে না পারেন তবে বিকল্পটি হ'ল সংকুচিত ভাগ করা লাইব্রেরি ব্যবহার করতে স্যুইচ করা। স্বীকৃত শেয়ার্ড লাইব্রেরিগুলির সাথে অ্যাপ ইনস্টলেশন সমস্যাগুলি এড়াতে আপনার অ্যাপ্লিকেশনটি প্যাকেজ করার সময় আপনার ভাগ করা লাইব্রেরিগুলিকে গ্রেড করার জন্য আপনার গ্রেডল কনফিগারেশন আপডেট করুন।
গ্রোভি
আপনার build.gradle
ফাইলে, নিম্নলিখিত বিকল্পটি যুক্ত করুন:
android {
...
packagingOptions {
jniLibs {
useLegacyPackaging true
}
}
}
কোটলিন
আপনার build.gradle.kts
ফাইলে, নিম্নলিখিত বিকল্পটি যুক্ত করুন:
android {
...
packagingOptions {
jniLibs {
useLegacyPackaging = true
}
}
}
16 কেবি এলফ প্রান্তিককরণ ব্যবহার করে আপনার অ্যাপ্লিকেশনটি সংকলন করুন
16 কেবি ডিভাইসগুলির জন্য আপনার অ্যাপ্লিকেশনটি চালানোর জন্য 16 কেবি এলফ সারিবদ্ধকরণ ব্যবহার করে ভাগ করে নেওয়া লাইব্রেরির ইএলএফ বিভাগগুলি সঠিকভাবে সারিবদ্ধ করা প্রয়োজন।
গেম বিকাশকারীদের জন্য, যদি আপনার গেমটি ইউনিটি গেম ইঞ্জিনের শীর্ষে চলে, তবে ইউনিটি গাইডটি উল্লেখ করুন। যদি আপনার গেমটি অবাস্তব গেম ইঞ্জিনের শীর্ষে চলে তবে অবাস্তব গাইডটি দেখুন। নেটিভ গেম ইঞ্জিনগুলির জন্য, এই গাইডটি দিয়ে চালিয়ে যান।
আপনার অ্যাপ্লিকেশনটি 16 কেবি এলফ সারিবদ্ধকরণ ব্যবহার করে সংকলন করতে, আপনি যে অ্যান্ড্রয়েড এনডিকে ব্যবহার করছেন তার সংস্করণটির উপর নির্ভর করে নিম্নলিখিত বিভাগগুলির একটিতে পদক্ষেপগুলি সম্পূর্ণ করুন।
অ্যান্ড্রয়েড এনডিকে আর 28 এবং উচ্চতর
এনডিকে সংস্করণ আর 28 এবং উচ্চতর সংকলন 16 কেবি-ডিফল্টরূপে সংযুক্ত।
অ্যান্ড্রয়েড এনডিকে আর 27
অ্যান্ড্রয়েড এনডিকে সংস্করণ আর 27 এবং উচ্চতর সহ 16 কেবি-সংযুক্ত শেয়ার্ড লাইব্রেরি সংকলন সমর্থন করার জন্য আপনাকে আপনার ndk-build
, build.gradle
, build.gradle.kts
বা লিঙ্কার পতাকাগুলি নিম্নরূপে আপডেট করতে হবে:
ndk-বিল্ড
আপনার 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
অ্যান্ড্রয়েড এনডিকে আর 26 এবং লোয়ার
অ্যান্ড্রয়েড এনডিকে সংস্করণ আর 26 বা তার চেয়ে কম 16 কেবি-সংযুক্ত শেয়ার্ড লাইব্রেরি সংকলন সমর্থন করার জন্য আপনাকে আপনার ndk-build
বা cmake
কনফিগারেশন আপডেট করতে হবে:
ndk-বিল্ড
16 কেবি এলফ সারিবদ্ধকরণ সক্ষম করতে আপনার Android.mk
আপডেট করুন:
LOCAL_LDFLAGS += "-Wl,-z,max-page-size=16384"
সিমেক
16 কেবি এলফ সারিবদ্ধকরণ সক্ষম করতে আপনার CMakeLists.txt
আপডেট করুন:
target_link_options(${CMAKE_PROJECT_NAME} PRIVATE "-Wl,-z,max-page-size=16384")
কোড ঠিক করুন এবং রানটাইম সমস্যাগুলি সমাধান করুন
এমনকি যদি আপনার অ্যাপ্লিকেশনটি 16 কেবি-সংযুক্ত থাকে তবে আপনার কোডের স্থানগুলি যদি ধরে নেয় যে কোনও ডিভাইস একটি নির্দিষ্ট পৃষ্ঠার আকার ব্যবহার করছে তবে আপনার অ্যাপ্লিকেশনটি ত্রুটির মুখোমুখি হতে পারে। এটি এড়াতে, নিম্নলিখিত পদক্ষেপগুলি সম্পূর্ণ করুন:
আপনার কোড যুক্তিতে
PAGE_SIZE
ধ্রুবক বা দৃষ্টান্তগুলি উল্লেখ করে এমন কোনও হার্ড-কোডেড নির্ভরতাগুলি সরান যা ধরে নেয় যে কোনও ডিভাইসের পৃষ্ঠার আকার 4 কেবি (4096
)।পরিবর্তে
getpagesize()
বাsysconf(_SC_PAGESIZE)
ব্যবহার করুন।mmap()
এবং অন্যান্য এপিআইগুলির ব্যবহারগুলি সন্ধান করুন যার জন্য পৃষ্ঠা-সংযুক্ত যুক্তিগুলির প্রয়োজন হয় এবং প্রয়োজনীয় বিকল্পগুলির সাথে প্রতিস্থাপন করুন।
কিছু ক্ষেত্রে, যদি আপনার অ্যাপ্লিকেশনটি PAGE_SIZE
একটি সুবিধাজনক মান হিসাবে ব্যবহার করে যা অন্তর্নিহিত পৃষ্ঠার আকারের সাথে আবদ্ধ নয়, তবে এটি 16 কেবি মোডে ব্যবহার করার সময় আপনার অ্যাপ্লিকেশনটি ভেঙে ফেলবে না। তবে, যদি এই মানটি mmap
দিয়ে MAP_FIXED
ছাড়াই কার্নেলের কাছে প্রেরণ করা হয় তবে কার্নেলটি এখনও একটি সম্পূর্ণ পৃষ্ঠা ব্যবহার করে, যা কিছু মেমরি নষ্ট করে। এই কারণে, NDK আর 27 এবং উচ্চতর 16 কেবি মোড সক্ষম করা হলে PAGE_SIZE
অপরিজ্ঞাত হয়।
যদি আপনার অ্যাপ্লিকেশনটি এইভাবে PAGE_SIZE
ব্যবহার করে এবং এই মানটি সরাসরি কার্নেলের কাছে প্রেরণ করে না, তবে PAGE_SIZE
ব্যবহার না করে, এটি অন্য উদ্দেশ্যে ব্যবহৃত হয় এবং এটি একটি বাস্তব মেমরি পৃষ্ঠা প্রতিফলিত করে না তা প্রতিফলিত করার জন্য একটি নতুন নাম সহ একটি নতুন ভেরিয়েবল তৈরি করুন।
16 কেবি সমর্থনের জন্য এসডিকে চেক করুন
অনেক এসডিকে 16 কেবি পৃষ্ঠার আকারের সাথে সামঞ্জস্যপূর্ণ, বিশেষত যদি আপনি সেগুলি নিজেই তৈরি করেন বা সাম্প্রতিক প্রাক -স্রোতগুলি পান। তবে, যেহেতু কিছু এসডিকে প্রিবিল্টস বা এসডিকে সংস্করণগুলি 16 কেবি সামঞ্জস্যপূর্ণ নয়, তাই 16 কেবি দিয়ে কোন সংস্করণটি ব্যবহার করবেন তা নির্ধারণ করতে আপনার প্রতিটি এসডিকে সরবরাহকারীর জন্য ওয়েবসাইটটি পরীক্ষা করা উচিত।
একটি 16 কেবি পরিবেশে আপনার অ্যাপ্লিকেশন পরীক্ষা করুন
আপনি 16 কেবি ডিভাইসের জন্য সমর্থন সহ আপনার অ্যাপটি তৈরি করার পরে, আপনার অ্যাপ্লিকেশনটি কোনও রিগ্রেশন অনুভব করে কিনা তা দেখতে আপনি 16 কেবি পরিবেশে আপনার অ্যাপ্লিকেশনটি পরীক্ষা করতে চাইবেন। এটি করার জন্য, এই পদক্ষেপগুলি অনুসরণ করুন:
নিম্নলিখিত পরীক্ষার পরিবেশগুলির একটি সেট আপ করুন:
আপনার পরীক্ষার ডিভাইসটি শুরু করুন, তারপরে এটি 16 কেবি পরিবেশ ব্যবহার করছে কিনা তা যাচাই করতে নিম্নলিখিত কমান্ডটি চালান:
adb shell getconf PAGE_SIZE
কমান্ডটি
16384
এর একটি মান ফেরত দেওয়া উচিত।আপনার অ্যাপ্লিকেশনটি 16 কেবি-প্রান্তিকযুক্ত কিনা তা যাচাই করতে নিম্নলিখিত
zipalign
কমান্ডটি চালান, যেখানে APK_NAME আপনার অ্যাপের এপিকে ফাইলের নাম:zipalign -c -P 16 -v 4 APK_NAME.apk
নির্দিষ্ট পৃষ্ঠার আকারগুলি উল্লেখ করে এমন কোডের উদাহরণগুলি পরিবর্তিত করে প্রভাবিত হতে পারে এমন কোনও ক্ষেত্রের উপর দৃষ্টি নিবদ্ধ করে আপনার অ্যাপ্লিকেশনটিকে পুরোপুরি পরীক্ষা করুন।
16-কেবি-ভিত্তিক, অ্যান্ড্রয়েড 15 সিস্টেম চিত্র সহ অ্যান্ড্রয়েড এমুলেটর সেট আপ করুন
অ্যান্ড্রয়েড এমুলেটর ব্যবহার করে একটি 16 কেবি পরিবেশ সেট আপ করতে, এই পদক্ষেপগুলি অনুসরণ করুন:
16-কেবি-ভিত্তিক, অ্যান্ড্রয়েড 15 এমুলেটর সিস্টেম চিত্রগুলি অ্যান্ড্রয়েড স্টুডিও জেলিফিশের সাথে সামঞ্জস্যপূর্ণ | 2023.3.1 বা উচ্চতর। তবে, 16 কেবি ডিভাইসের সাথে কাজ করার সময় সেরা অভিজ্ঞতার জন্য, অ্যান্ড্রয়েড স্টুডিও লেডিবাগ ব্যবহার করুন | 2024.2.1 বা উচ্চতর।
আমরা সর্বদা নতুন বৈশিষ্ট্যগুলিতে কাজ করছি, সুতরাং নতুন সংস্করণগুলি বা অ্যান্ড্রয়েড স্টুডিওর সর্বশেষ পূর্বরূপ সংস্করণটি উপলব্ধ হওয়ার সাথে সাথে ডাউনলোড করার বিষয়টি বিবেচনা করুন।
মনে রাখবেন যে আপনি অ্যান্ড্রয়েড স্টুডিওর আপনার বিদ্যমান সংস্করণটি ইনস্টল রাখতে পারেন, কারণ আপনি পাশাপাশি একাধিক সংস্করণ ইনস্টল করতে পারেন।
অ্যান্ড্রয়েড স্টুডিওতে, সরঞ্জামগুলি> এসডিকে ম্যানেজার ক্লিক করুন।
এসডিকে প্ল্যাটফর্ম ট্যাবে, প্যাকেজের বিশদগুলি দেখান , তারপরে অ্যান্ড্রয়েড ভ্যানিলাইক্রিম বা উচ্চতর বিভাগটি প্রসারিত করুন এবং আপনি তৈরি করতে চান ভার্চুয়াল ডিভাইসগুলির উপর নির্ভর করে নিম্নলিখিত এমুলেটর সিস্টেম চিত্রগুলির একটি বা উভয় নির্বাচন করুন:
- গুগল এপিআই পরীক্ষামূলক 16 কেবি পৃষ্ঠার আকার আর্ম 64 ভি 8 এ সিস্টেম চিত্র
- গুগল এপিআই পরীক্ষামূলক 16 কেবি পৃষ্ঠার আকার ইন্টেল x86_64 অ্যাটম সিস্টেম চিত্র
আপনি নির্বাচিত যে কোনও সিস্টেম চিত্র ডাউনলোড করতে প্রয়োগ করুন> ওকে ক্লিক করুন।
অ্যান্ড্রয়েড 15 এর জন্য ভার্চুয়াল ডিভাইস সেট আপ করার পদক্ষেপগুলি অনুসরণ করুন এবং যখন কোনও সিস্টেম চিত্র নির্বাচন করার জন্য অনুরোধ জানানো হয়, আপনি ডাউনলোড করেছেন এমন 16 কেবি সিস্টেম চিত্র নির্বাচন করুন। যদি এটি স্বয়ংক্রিয়ভাবে প্রস্তাবিত না হয় তবে আপনি অন্যান্য চিত্র ট্যাবে 16 কেবি সিস্টেম চিত্রটি খুঁজে পেতে পারেন।
কিছু এমুলেটর সংস্করণ এবং সিস্টেম চিত্রগুলির জন্য অতিরিক্ত পদক্ষেপ
অ্যান্ড্রয়েড এমুলেটর সংস্করণগুলির জন্য 35.1.5 এর মাধ্যমে 35.1.20 এর জন্য, এবং এসডিকে ম্যানেজারে দেওয়া অ্যান্ড্রয়েড 15.0 16 কেবি পৃষ্ঠার আকারের সিস্টেম চিত্রগুলির সংশোধন 4 এর আগে, x86_64 সিস্টেমে 16 কেবি পরিবেশের অনুকরণ করতে আপনাকে নিম্নলিখিত পদক্ষেপগুলিও সম্পূর্ণ করতে হবে। এই পদক্ষেপগুলি 35.1.21 সংস্করণটির পরে এবং অ্যান্ড্রয়েডের 15.0 16 কেবি পৃষ্ঠার আকারের সিস্টেমের চিত্র বা তার পরে সংশোধন 4 এর পরে প্রয়োজন হয় না।
- ডিভাইস ম্যানেজারে, 16 কেবি চিত্রের পাশের 3 টি বিন্দুতে ক্লিক করুন, তারপরে ডিস্কে শো ক্লিক করুন।
- এই ফোল্ডারে,
config.ini
ফাইলটি সন্ধান করুন। config.ini
ফাইলটিতে নিম্নলিখিত লাইনটি যুক্ত করুন এবং আপনার পরিবর্তনগুলি সংরক্ষণ করুন:kernel.parameters = androidboot.page_shift=14
আপনার পরিবর্তনগুলি যাচাই করতে, নিম্নলিখিত কমান্ডটি চালান, যা
16384
ফিরে আসা উচিত:adb shell getconf PAGE_SIZE
এমুলেটর চালু করুন
আপনি অ্যান্ড্রয়েড এমুলেটর এবং ভার্চুয়াল ডিভাইসগুলি সেটআপ শেষ করার পরে, লক্ষ্য ডিভাইস মেনু থেকে বা কমান্ড লাইন থেকে এমুলেটরটি চালু করুন।
বিকাশকারী বিকল্পগুলি ব্যবহার করে একটি ডিভাইসে 16 KB মোড সক্ষম করুন৷

16 KB মোডে একটি ডিভাইস বুট করতে 16KB পৃষ্ঠা আকারের বিকাশকারী বিকল্পের সাথে বুটটি টগল করুন।
Android 15 QPR1 দিয়ে শুরু করে, আপনি ডিভাইসটিকে 16 KB মোডে বুট করতে এবং ডিভাইসে পরীক্ষা করার জন্য নির্দিষ্ট ডিভাইসে উপলব্ধ ডেভেলপার বিকল্পটি ব্যবহার করতে পারেন। বিকাশকারী বিকল্পটি ব্যবহার করার আগে, সেটিংস -> সিস্টেম -> সফ্টওয়্যার আপডেটগুলিতে যান এবং উপলব্ধ যে কোনও আপডেট প্রয়োগ করুন৷
এই বিকাশকারী বিকল্পটি নিম্নলিখিত ডিভাইসগুলিতে উপলব্ধ:
Pixel 8 এবং 8 Pro (Android 15 QPR1 বা উচ্চতর সহ)
সতর্কতা : Android 15 QPR2 Beta 3 এর সাথে একটি পরিচিত সমস্যার কারণে, Android 15 QPR2 বিটা 3 ইনস্টল করার পরে এবং 16 KB মোডে ডিভাইস বুট করার পরে টাচস্ক্রিন Pixel 8 ডিভাইসে কাজ করে না। এই সমস্যাটি Pixel 8 Pro ডিভাইসগুলিকে প্রভাবিত করে না।
Pixel 8a (Android 15 QPR1 বা উচ্চতর সহ)
সতর্কতা : Android 15 QPR2 Beta 3 এর সাথে একটি পরিচিত সমস্যার কারণে, Android 15 QPR2 বিটা 3 ইনস্টল করার পরে এবং 16 KB মোডে ডিভাইস বুট করার পরে টাচস্ক্রিন Pixel 8a ডিভাইসে কাজ করে না।
Pixel 9, 9 Pro, এবং 9 Pro XL (Android 15 QPR2 বিটা 2 বা উচ্চতর সহ)
গুগল প্লে সামঞ্জস্যতা প্রয়োজন
যেহেতু ডিভাইস নির্মাতারা পারফরম্যান্স অনুকূল করতে আরও বেশি র্যাম দিয়ে ডিভাইসগুলি সজ্জিত করে, অনেকে 16 কেবি এর মতো বৃহত্তর পৃষ্ঠার আকার গ্রহণ করবেন। এই আসন্ন ডিভাইসগুলির প্রবর্তন প্রস্তুত করতে, গুগল প্লে বিদ্যমান অ্যাপ্লিকেশনগুলিতে সমস্ত নতুন অ্যাপ্লিকেশন এবং আপডেটগুলির জন্য একটি সামঞ্জস্যতা প্রয়োজনীয়তা চালু করা হয়েছে এবং অ্যান্ড্রয়েড 15+ ডিভাইসগুলিকে লক্ষ্য করে 1 নভেম্বর, 2025 থেকে শুরু করে 16 কেবি পৃষ্ঠার আকারগুলি সমর্থন করার জন্য।
এই সামঞ্জস্যতার প্রয়োজনীয়তা সম্পর্কে আরও পড়তে, এই ব্লগ পোস্টটি দেখুন।