ঐতিহাসিকভাবে, অ্যান্ড্রয়েড শুধুমাত্র 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% দ্রুত ঠান্ডা শুরু হয়
- উন্নত সিস্টেম বুট সময়: গড়ে 1.5% (প্রায় 0.8 সেকেন্ড) দ্বারা উন্নত
এই উন্নতিগুলি আমাদের প্রাথমিক পরীক্ষার উপর ভিত্তি করে করা হয়েছে এবং প্রকৃত ডিভাইসগুলির ফলাফলগুলি সম্ভবত আলাদা হতে পারে৷ আমরা আমাদের পরীক্ষা চালিয়ে যাওয়ার সাথে সাথে অ্যাপগুলির সম্ভাব্য লাভের অতিরিক্ত বিশ্লেষণ প্রদান করব।
আপনার অ্যাপ প্রভাবিত হয়েছে কিনা তা পরীক্ষা করুন
যদি আপনার অ্যাপ কোনো নেটিভ কোড ব্যবহার করে , তাহলে আপনার অ্যাপটিকে 16 KB ডিভাইসের জন্য সমর্থন সহ পুনর্নির্মাণ করা উচিত। আপনার অ্যাপটি নেটিভ কোড ব্যবহার করে কিনা তা আপনি যদি নিশ্চিত না হন, তাহলে কোনো নেটিভ কোড আছে কিনা তা শনাক্ত করতে আপনি APK অ্যানালাইজার ব্যবহার করতে পারেন।
যদি আপনার অ্যাপটি শুধুমাত্র জাভা প্রোগ্রামিং ভাষায় বা কোটলিনে লেখা কোড ব্যবহার করে, যার মধ্যে সব লাইব্রেরি বা SDK সহ, তাহলে আপনার অ্যাপটি ইতিমধ্যেই 16 KB ডিভাইস সমর্থন করে। তবুও, আমরা সুপারিশ করছি যে আপনি অ্যাপের আচরণে কোনো অপ্রত্যাশিত রিগ্রেশন নেই তা যাচাই করতে 16 KB পরিবেশে আপনার অ্যাপটি পরীক্ষা করুন ।
আপনার অ্যাপ কি নেটিভ কোড ব্যবহার করে?
আপনার অ্যাপটি নেটিভ কোড ব্যবহার করে যদি নিচের কোনটি প্রযোজ্য হয়:
- আপনার অ্যাপ যেকোনো C/C++ (নেটিভ) কোড ব্যবহার করে। আপনার অ্যাপ যদি Android NDK ব্যবহার করে, তাহলে আপনার অ্যাপটি নেটিভ কোড ব্যবহার করে।
- আপনার অ্যাপটি যেকোন থার্ড-পার্টি নেটিভ লাইব্রেরি বা সেগুলি ব্যবহার করে এমন নির্ভরতার সাথে লিঙ্ক করে।
- আপনার অ্যাপটি একটি থার্ড-পার্টি অ্যাপ নির্মাতা দ্বারা তৈরি করা হয়েছে যেটি ডিভাইসে নেটিভ লাইব্রেরি ব্যবহার করে।
APK বিশ্লেষক ব্যবহার করে নেটিভ লাইব্রেরি সনাক্ত করুন
APK বিশ্লেষক একটি টুল যা আপনাকে একটি নির্মিত APK এর বিভিন্ন দিক মূল্যায়ন করতে দেয়। আপনার অ্যাপ নেটিভ কোড বা লাইব্রেরি ব্যবহার করে কিনা তা শনাক্ত করতে, এই ধাপগুলি অনুসরণ করুন:
- অ্যান্ড্রয়েড স্টুডিও খুলুন, তারপরে ফাইল > খুলুন ক্লিক করুন এবং যেকোনো প্রকল্প বেছে নিন।
মেনু বার থেকে, Build > Analyze APK... এ ক্লিক করুন।
আপনি যে APK বিশ্লেষণ করতে চান সেটি বেছে নিন।
lib
ফোল্ডারের মধ্যে দেখুন, যেটি শেয়ার করা অবজেক্ট (.so
) ফাইলগুলিকে হোস্ট করে যদি থাকে। কোনো শেয়ার করা অবজেক্ট ফাইল উপস্থিত থাকলে, আপনার অ্যাপ নেটিভ কোড ব্যবহার করে। যদি কোনো শেয়ার করা অবজেক্ট ফাইল না থাকে বা কোনোlib
ফোল্ডার না থাকে, তাহলে আপনার অ্যাপ নেটিভ কোড ব্যবহার করে না।
16 KB ডিভাইসের জন্য সমর্থন সহ আপনার অ্যাপ তৈরি করুন
16 KB ডিভাইসগুলিকে সমর্থন করার জন্য, নেটিভ কোড ব্যবহার করে এমন অ্যাপগুলিকে নিম্নলিখিত বিভাগে বর্ণিত ধাপগুলি সম্পূর্ণ করতে হবে।
আপনার ভাগ করা লাইব্রেরিগুলির প্যাকেজিং আপডেট করুন৷
আমরা সুপারিশ করি যে আপনি AGP সংস্করণ 8.3 বা উচ্চতর সংস্করণে আপগ্রেড করুন এবং অসংকুচিত শেয়ার্ড লাইব্রেরি ব্যবহার করুন।
AGP সংস্করণ 8.3 বা উচ্চতর
16 KB ডিভাইসের জন্য এমন অ্যাপের প্রয়োজন হয় যেগুলিকে 16 KB জিপ-সারিবদ্ধ সীমারেখায় সারিবদ্ধ করার জন্য আনকমপ্রেসড শেয়ার্ড লাইব্রেরি সহ পাঠানো হয়। এটি করার জন্য, আপনাকে Android Gradle Plugin (AGP) সংস্করণ 8.3 বা উচ্চতর আপগ্রেড করতে হবে। আপগ্রেড প্রক্রিয়ার বিশদ বিবরণের জন্য Android Gradle প্লাগইন আপগ্রেড সহকারী বিভাগে পড়ুন।
AGP সংস্করণ 8.2 বা তার কম
আপনি যদি AGP-কে 8.3 বা উচ্চতর সংস্করণে আপগ্রেড করতে না পারেন, তাহলে বিকল্পটি হল সংকুচিত শেয়ার্ড লাইব্রেরি ব্যবহার করার জন্য স্যুইচ করা। আনলাইনড শেয়ার্ড লাইব্রেরিগুলির সাথে অ্যাপ ইনস্টলেশন সমস্যা এড়াতে আপনার অ্যাপ প্যাকেজ করার সময় 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 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")
Android 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
নির্দিষ্ট পৃষ্ঠার আকারের উল্লেখ করে এমন কোড উদাহরণগুলির জন্য পরীক্ষা করুন
এমনকি যদি আপনার অ্যাপটি 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 পরিবেশে আপনার অ্যাপ পরীক্ষা করুন
আপনি 16 KB ডিভাইসের জন্য সমর্থন সহ আপনার অ্যাপ তৈরি করার পরে, আপনি আপনার অ্যাপটি 16 KB এনভায়রনমেন্টে পরীক্ষা করে দেখতে চাইবেন যে আপনার অ্যাপ কোনো রিগ্রেশনের সম্মুখীন হচ্ছে কিনা। এটি করার জন্য, এই পদক্ষেপগুলি অনুসরণ করুন:
নিম্নলিখিত পরীক্ষার পরিবেশগুলির মধ্যে একটি সেট আপ করুন:
আপনার পরীক্ষা ডিভাইস শুরু করুন, তারপর এটি একটি 16 KB পরিবেশ ব্যবহার করছে তা যাচাই করতে নিম্নলিখিত কমান্ডটি চালান:
adb shell getconf PAGE_SIZE
কমান্ডটি
16384
এর একটি মান প্রদান করবে।যেকোনো শেয়ার করা লাইব্রেরির জন্য, যাচাই করুন যে শেয়ার করা লাইব্রেরির ELF সেগমেন্টগুলি 16 KB ELF অ্যালাইনমেন্ট ব্যবহার করে সঠিকভাবে সারিবদ্ধ হয়েছে। আপনি এই প্রক্রিয়াটি সাহায্য করার জন্য এই স্ক্রিপ্টটি ব্যবহার করতে পারেন:
#!/bin/bash # usage: alignment.sh path to search for *.so files dir="$1" RED="\e[31m" GREEN="\e[32m" ENDCOLOR="\e[0m" matches="$(find $dir -name "*.so" -type f)" IFS=$'\n' for match in $matches; do res="$(objdump -p ${match} | grep LOAD | awk '{ print $NF }' | head -1)" if [[ $res =~ "2**14" ]] || [[ $res =~ "2**16" ]]; then echo -e "${match}: ${GREEN}ALIGNED${ENDCOLOR} ($res)" else echo -e "${match}: ${RED}UNALIGNED${ENDCOLOR} ($res)" fi done
একটি ফাইলে স্ক্রিপ্ট সংরক্ষণ করুন, যেমন
alignment.sh
।আপনার অ্যাপের APK ফাইল বের করুন:
unzip APK_NAME.apk -d /tmp/my_apk_out
/tmp/my_apk_out
ডিরেক্টরিতে নিষ্কাশিত ফাইলগুলিতে স্ক্রিপ্টটি চালান:alignment.sh /tmp/my_apk_out | grep "arm64-v8a"
সমস্ত
arm64-v8a
শেয়ার করা লাইব্রেরিগুলির জন্য স্ক্রিপ্টটিALIGNED
বাUNALIGNED
আউটপুট দেয়।যদি কোনো
arm64-v8a
শেয়ার্ড লাইব্রেরিUNALIGNED
থাকে, তাহলে আপনাকে সেই লাইব্রেরিগুলির জন্য প্যাকেজিং আপডেট করতে হবে, তারপর আপনার অ্যাপ পুনরায় কম্পাইল করুন এবং এই বিভাগের ধাপগুলি অনুসরণ করে পুনরায় পরীক্ষা করুন৷
আপনার অ্যাপটি 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 বা তার বেশি। যাইহোক, অ্যান্ড্রয়েড 15 বিটা নিয়ে কাজ করার সময় সেরা অভিজ্ঞতার জন্য, অ্যান্ড্রয়েড স্টুডিওর সর্বশেষ প্রিভিউ সংস্করণ ডাউনলোড করুন।
মনে রাখবেন যে আপনি আপনার Android স্টুডিওর বিদ্যমান সংস্করণ ইনস্টল রাখতে পারেন, কারণ আপনি পাশাপাশি একাধিক সংস্করণ ইনস্টল করতে পারেন।
অ্যান্ড্রয়েড স্টুডিওতে, টুলস > SDK ম্যানেজার-এ ক্লিক করুন।
SDK প্ল্যাটফর্ম ট্যাবে, প্যাকেজ বিশদ দেখান চেক করুন, তারপরে Android VanillaIceCream পূর্বরূপ বিভাগটি প্রসারিত করুন এবং আপনি যে ভার্চুয়াল ডিভাইসগুলি তৈরি করতে চান তার উপর নির্ভর করে নিম্নলিখিত এমুলেটর সিস্টেম চিত্রগুলির মধ্যে একটি বা উভয় নির্বাচন করুন:
- Google APIs পরীক্ষামূলক 16k পৃষ্ঠার আকার ARM 64 v8a সিস্টেম চিত্র
- Google APIs পরীক্ষামূলক 16k পৃষ্ঠার আকার ইন্টেল x86_64 অ্যাটম সিস্টেম চিত্র
আপনি যে সিস্টেমের ছবি নির্বাচন করেছেন তা ডাউনলোড করতে প্রয়োগ করুন > ঠিক আছে ক্লিক করুন।
Android 15 এর জন্য একটি ভার্চুয়াল ডিভাইস সেট আপ করার পদক্ষেপগুলি অনুসরণ করুন এবং যখন একটি সিস্টেম চিত্র নির্বাচন করার জন্য অনুরোধ করা হয়, তখন আপনার ডাউনলোড করা 16 KB সিস্টেম চিত্রটি নির্বাচন করুন৷ যদি এটি স্বয়ংক্রিয়ভাবে প্রস্তাবিত না হয়, আপনি অন্যান্য চিত্র ট্যাবে 16 KB সিস্টেম চিত্রটি খুঁজে পেতে পারেন।
- ডিভাইস ম্যানেজারে, 16 KB ছবির পাশে 3টি বিন্দুতে ক্লিক করুন, তারপর Disk এ Show এ ক্লিক করুন।
- এই ফোল্ডারে,
config.ini
ফাইলটি খুঁজুন। config.ini
ফাইলে নিম্নলিখিত লাইন যোগ করুন এবং আপনার পরিবর্তনগুলি সংরক্ষণ করুন:kernel.parameters = androidboot.page_shift=14
আপনার পরিবর্তনগুলি যাচাই করতে, নিম্নলিখিত কমান্ডটি চালান, যা
16384
রিটার্ন করবে:adb shell getconf PAGE_SIZE