16 কেবি পৃষ্ঠার আকার সমর্থন করে

১৬ কেবি গুগল প্লে সামঞ্জস্যের প্রয়োজনীয়তা
১ নভেম্বর, ২০২৫ থেকে, Google Play এবং Android 15+ ডিভাইসগুলিতে জমা দেওয়া সমস্ত নতুন অ্যাপ এবং বিদ্যমান অ্যাপগুলির আপডেটগুলি ৬৪-বিট ডিভাইসগুলিতে ১৬ KB পৃষ্ঠা আকার সমর্থন করতে হবে।

ঐতিহাসিকভাবে, অ্যান্ড্রয়েড শুধুমাত্র 4 KB মেমরি পৃষ্ঠার আকার সমর্থন করে, যা অ্যান্ড্রয়েড ডিভাইসে সাধারণত থাকা মোট মেমরির গড় পরিমাণের জন্য সিস্টেম মেমরির কার্যকারিতা অপ্টিমাইজ করেছে। অ্যান্ড্রয়েড 15 দিয়ে শুরু করে, AOSP 16 KB (16 KB ডিভাইস) এর পৃষ্ঠার আকার ব্যবহার করার জন্য কনফিগার করা ডিভাইসগুলিকে সমর্থন করে। যদি আপনার অ্যাপটি SDK-এর মাধ্যমে প্রত্যক্ষ বা পরোক্ষভাবে কোনও NDK লাইব্রেরি ব্যবহার করে, তাহলে এই 16 KB ডিভাইসে কাজ করার জন্য আপনাকে আপনার অ্যাপটি পুনর্নির্মাণ করতে হবে।

যেহেতু ডিভাইস নির্মাতারা বৃহত্তর পরিমাণে ভৌত মেমরি (RAM) সহ ডিভাইসগুলি তৈরি করতে থাকে, এই ডিভাইসগুলির মধ্যে অনেকগুলি ডিভাইসের কার্যকারিতা অপ্টিমাইজ করার জন্য 16 KB (এবং শেষ পর্যন্ত আরও বড়) পৃষ্ঠার আকার গ্রহণ করবে। 16 KB পৃষ্ঠার আকারের ডিভাইসগুলির জন্য সমর্থন যোগ করা আপনার অ্যাপটিকে এই ডিভাইসগুলিতে চালানোর জন্য সক্ষম করে এবং আপনার অ্যাপটিকে সংশ্লিষ্ট কর্মক্ষমতা উন্নতি থেকে উপকৃত হতে সাহায্য করে। পুনরায় কম্পাইল করা ছাড়া, অ্যাপগুলি ভবিষ্যতের Android রিলিজে 16 KB ডিভাইসে কাজ করবে না।

আপনার অ্যাপের জন্য সমর্থন যোগ করতে আপনাকে সাহায্য করার জন্য, আমরা কীভাবে আপনার অ্যাপ প্রভাবিত হয়েছে কিনা তা পরীক্ষা করতে , কীভাবে আপনার অ্যাপটি পুনর্নির্মাণ করতে হয় (যদি প্রযোজ্য হয়), এবং কীভাবে এমুলেটর ব্যবহার করে আপনার অ্যাপটি 16 কেবি পরিবেশে পরীক্ষা করতে হয় (অ্যান্ড্রয়েড এমুলেটরের জন্য অ্যান্ড্রয়েড 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 সামঞ্জস্যপূর্ণ কিনা তা নির্বিশেষে):

  1. অ্যান্ড্রয়েড স্টুডিও খুলুন, তারপর ফাইল > খুলুন এ ক্লিক করুন এবং যেকোনো প্রকল্প নির্বাচন করুন।
  2. মেনু বার থেকে, Build > Analyze APK... এ ক্লিক করুন।

    APK অ্যানালাইজার চালু করার জন্য স্টুডিও বিল্ড মেনু বিকল্প
  3. আপনি যে APKটি বিশ্লেষণ করতে চান তা নির্বাচন করুন।

  4. lib ফোল্ডারের ভেতরে দেখুন, যেখানে যদি কোন শেয়ার্ড অবজেক্ট ( .so ) ফাইল থাকে, তাহলে তা হোস্ট করে। যদি কোন শেয়ার্ড অবজেক্ট ফাইল থাকে, তাহলে আপনার অ্যাপটি নেটিভ কোড ব্যবহার করে। অ্যালাইনমেন্ট কলাম অ্যালাইনমেন্ট সমস্যাযুক্ত যেকোনো ফাইলের জন্য সতর্কতা বার্তা প্রদর্শন করে। যদি কোন শেয়ার্ড অবজেক্ট ফাইল উপস্থিত না থাকে বা কোনও lib ফোল্ডার না থাকে, তাহলে আপনার অ্যাপটি নেটিভ কোড ব্যবহার করে না।

    APK অ্যানালাইজার ভিউ দেখায় যে শেয়ার করা অবজেক্ট ফাইলগুলি উপস্থিত রয়েছে

স্বয়ংক্রিয় চেকের মাধ্যমে সারিবদ্ধকরণের সমস্যাগুলি সনাক্ত করুন

আপনার পূর্বনির্মিত লাইব্রেরি বা APK গুলি যদি 16 KB অনুবর্তী না হয়, তাহলে Android Studio আপনাকে সক্রিয়ভাবে সতর্ক করে। কোন লাইব্রেরিগুলি আপডেট করা প্রয়োজন বা কোনও কোড পরিবর্তন প্রয়োজন কিনা তা পর্যালোচনা করতে APK বিশ্লেষক টুল ব্যবহার করুন।

কোনও প্রকল্পে অ্যালাইনমেন্ট সমস্যা সম্পর্কে স্টুডিও সতর্কতা বিজ্ঞপ্তি

অ্যান্ড্রয়েড স্টুডিওতে লিন্ট এমন নেটিভ লাইব্রেরিগুলিকেও হাইলাইট করে যেগুলি 16 KB সারিবদ্ধ নয়।

একটি অ-সংযুক্ত নেটিভ লাইব্রেরি সম্পর্কে স্টুডিও লিন্টার সতর্কতা

শেয়ার্ড লাইব্রেরির জন্য ELF সেগমেন্টের সারিবদ্ধতা পরীক্ষা করুন

যেকোনো শেয়ার্ড লাইব্রেরির জন্য, শেয়ার্ড লাইব্রেরির ELF সেগমেন্টগুলি 16 KB ELF অ্যালাইনমেন্ট ব্যবহার করে সঠিকভাবে অ্যালাইন করা আছে কিনা তা যাচাই করুন। আপনি যদি Linux অথবা macOS-এ ডেভেলপ করেন, তাহলে আপনি নিম্নলিখিত বিভাগে বর্ণিত check_elf_alignment.sh স্ক্রিপ্ট ব্যবহার করতে পারেন। আপনি সরাসরি কমান্ড-লাইন টুলগুলিও ব্যবহার করতে পারেন।

check_elf_alignment.sh স্ক্রিপ্ট ব্যবহার করুন (লিনাক্স বা ম্যাকোস)

check_elf_alignment.sh স্ক্রিপ্ট ব্যবহার করে ELF সেগমেন্টের অ্যালাইনমেন্ট পরীক্ষা করতে এই ধাপগুলি অনুসরণ করুন:

  1. check_elf_alignment.sh স্ক্রিপ্টটি একটি ফাইলে সংরক্ষণ করুন।

  2. আপনার অ্যাপের APK ফাইলে স্ক্রিপ্টটি চালান:

    check_elf_alignment.sh APK_NAME.apk
    

    সমস্ত arm64-v8a শেয়ার্ড লাইব্রেরির জন্য স্ক্রিপ্টটি হয় ALIGNED অথবা UNALIGNED আউটপুট দেয়।

  3. যদি কোনও arm64-v8a বা x86_64 শেয়ার্ড লাইব্রেরি UNALIGNED হয়, তাহলে আপনাকে সেই লাইব্রেরিগুলির প্যাকেজিং আপডেট করতে হবে, তারপর আপনার অ্যাপটি পুনরায় কম্পাইল করতে হবে এবং এই বিভাগের ধাপগুলি অনুসরণ করে পুনরায় পরীক্ষা করতে হবে।

সরাসরি কমান্ড-লাইন টুল ব্যবহার করুন

কমান্ড-লাইন টুল ব্যবহার করে সরাসরি ELF সেগমেন্টের অ্যালাইনমেন্ট পরীক্ষা করতে এই ধাপগুলি অনুসরণ করুন:

  1. অ্যান্ড্রয়েড স্টুডিও বা sdkmanager কমান্ড-লাইন টুলে SDK ম্যানেজার ব্যবহার করে অ্যান্ড্রয়েড SDK বিল্ড-টুল সংস্করণ 35.0.0 বা তার বেশি এবং অ্যান্ড্রয়েড NDK উভয়ই ইনস্টল করা আছে কিনা তা নিশ্চিত করুন।
  2. আপনার অ্যাপের APK ফাইলটি বের করুন:

    লিনাক্স বা ম্যাকওএস

    unzip APK_NAME.apk -d /tmp/my_apk_out
    

    উইন্ডোজ (পাওয়ারশেল)

    Expand-Archive -Path .\APK_NAME.apk -DestinationPath ~\tmp\my_apk_out
    
  3. যে অস্থায়ী ডিরেক্টরিতে আপনি আপনার 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
    
  4. লোড সেগমেন্টের মান 2**14 এর কম না হওয়া নিশ্চিত করতে আউটপুট লাইনগুলি পরীক্ষা করুন। যদি কোনও লোড সেগমেন্ট 2**13 , 2**12 , বা তার কম মান হয়, তাহলে আপনাকে সেই লাইব্রেরিগুলির প্যাকেজিং আপডেট করতে হবে, তারপর আপনার অ্যাপটি পুনরায় কম্পাইল করতে হবে এবং এই বিভাগের ধাপগুলি অনুসরণ করে পুনরায় পরীক্ষা করতে হবে।

  5. এরপর, আপনার অ্যাপের 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 ডিভাইস সমর্থন করে কিনা তা নিশ্চিত করতে নিম্নলিখিত বিভাগগুলিতে বর্ণিত পদক্ষেপগুলি সম্পূর্ণ করুন:

  1. আপনার শেয়ার্ড লাইব্রেরির প্যাকেজিং আপডেট করুন
  2. ১৬ কেবি ইএলএফ অ্যালাইনমেন্ট ব্যবহার করে আপনার অ্যাপটি কম্পাইল করুন
  3. কোড ঠিক করুন এবং রানটাইম সমস্যা সমাধান করুন
  4. ১৬ কেবি সাপোর্টের জন্য SDK গুলি পরীক্ষা করুন

আপনার শেয়ার্ড লাইব্রেরির প্যাকেজিং আপডেট করুন

আমরা আপনাকে AGP সংস্করণ 8.5.1 বা তার উচ্চতর সংস্করণে আপগ্রেড করার এবং আনকম্প্রেসড শেয়ার্ড লাইব্রেরি ব্যবহার করার পরামর্শ দিচ্ছি।

AGP সংস্করণ 8.5.1 বা তার বেশি

১৬ কিলোবাইট ডিভাইসের জন্য আনকম্প্রেসড শেয়ার্ড লাইব্রেরি সহ পাঠানো অ্যাপগুলিকে ১৬ কিলোবাইট জিপ-অ্যালাইনড বাউন্ডারিতে সারিবদ্ধ করতে হবে। এটি করার জন্য, আপনাকে Android Gradle Plugin (AGP) সংস্করণ 8.5.1 বা তার বেশি সংস্করণে আপগ্রেড করতে হবে। আপগ্রেড প্রক্রিয়া সম্পর্কে বিস্তারিত জানতে Android Gradle plugin Upgrade Assistant বিভাগটি দেখুন।

AGP সংস্করণ 8.5 বা তার কম

যদি আপনি AGP ভার্সন 8.5.1 বা তার বেশি সংস্করণে আপগ্রেড করতে না পারেন, তাহলে বিকল্প হল কম্প্রেসড শেয়ার্ড লাইব্রেরি ব্যবহার করা। আপনার গ্র্যাডেল কনফিগারেশন আপডেট করুন যাতে গ্র্যাডেল আপনার শেয়ার্ড লাইব্রেরিগুলিকে কম্প্রেস করে আপনার অ্যাপ প্যাকেজ করার সময় আনঅ্যালাইনড শেয়ার্ড লাইব্রেরিগুলির সাথে অ্যাপ ইনস্টলেশনের সমস্যা এড়াতে পারে।

খাঁজকাটা

আপনার build.gradle ফাইলে, নিম্নলিখিত বিকল্পটি যোগ করুন:

android {
  ...
  packagingOptions {
      jniLibs {
        useLegacyPackaging true
      }
  }
}

কোটলিন

আপনার build.gradle.kts ফাইলে, নিম্নলিখিত বিকল্পটি যোগ করুন:

android {
  ...
  packagingOptions {
      jniLibs {
        useLegacyPackaging = true
      }
  }
}

১৬ কেবি ইএলএফ অ্যালাইনমেন্ট ব্যবহার করে আপনার অ্যাপটি কম্পাইল করুন

১৬ কিলোবাইট ডিভাইসের জন্য আপনার অ্যাপটি চালানোর জন্য ১৬ কিলোবাইট ইএলএফ অ্যালাইনমেন্ট ব্যবহার করে শেয়ার্ড লাইব্রেরির ELF সেগমেন্টগুলিকে সঠিকভাবে অ্যালাইন করা প্রয়োজন।

গেম ডেভেলপারদের জন্য, যদি আপনার গেমটি ইউনিটি গেম ইঞ্জিনের উপরে চলে, তাহলে ইউনিটি গাইডটি দেখুন। যদি আপনার গেমটি আনরিয়েল গেম ইঞ্জিনের উপরে চলে, তাহলে আনরিয়েল গাইডটি দেখুন। নেটিভ গেম ইঞ্জিনের জন্য, এই গাইডটি চালিয়ে যান।

১৬ কেবি ইএলএফ অ্যালাইনমেন্ট ব্যবহার করে আপনার অ্যাপ কম্পাইল করতে, আপনি যে অ্যান্ড্রয়েড এনডিকে সংস্করণটি ব্যবহার করছেন তার উপর নির্ভর করে নিম্নলিখিত বিভাগগুলির একটিতে ধাপগুলি সম্পূর্ণ করুন।

অ্যান্ড্রয়েড এনডিকে আর২৮ এবং উচ্চতর

NDK ভার্সন r28 এবং উচ্চতর সংস্করণগুলি ডিফল্টরূপে 16 KB-সারিবদ্ধভাবে কম্পাইল করে।

অ্যান্ড্রয়েড এনডিকে আর২৭

অ্যান্ড্রয়েড এনডিকে ভার্সন r27 এবং উচ্চতর সংস্করণ সহ 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

অ্যান্ড্রয়েড এনডিকে আর২৬ এবং তার নিচের

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

Android NDK ভার্সন r26 বা তার কম ভার্সনের সাথে ১৬ KB-সারিবদ্ধ শেয়ার্ড লাইব্রেরি কম্পাইল করার জন্য, আপনাকে আপনার ndk-build অথবা cmake কনফিগারেশনটি নিম্নরূপ আপডেট করতে হবে:

ndk-বিল্ড

১৬ কেবি ইএলএফ অ্যালাইনমেন্ট সক্ষম করতে আপনার Android.mk আপডেট করুন:

LOCAL_LDFLAGS += "-Wl,-z,max-page-size=16384"

সিমেক

১৬ কেবি ELF অ্যালাইনমেন্ট সক্ষম করতে আপনার CMakeLists.txt আপডেট করুন:

target_link_options(${CMAKE_PROJECT_NAME} PRIVATE "-Wl,-z,max-page-size=16384")

অ্যান্ড্রয়েড এনডিকে r22 এবং তার নিচের

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

NDK r26 এবং তার নিচের ধাপের পাশাপাশি, যদি আপনি NDK r22 বা তার নিচের ব্যবহার করেন, তাহলে আপনাকে common-page-size=16384 সেট করতে হবে। GNU ld এবং LLVM lld লিঙ্কারের পূর্ববর্তী সংস্করণগুলিতে বাগ থাকার কারণে common-page-size=16384 সেট করা প্রয়োজন। এই common-page-size সমাধানটি কেবল তখনই কাজ করবে যদি ELF-তে .relro_padding বিভাগ (LLD 18 এবং নতুন) থাকে।

অ্যান্ড্রয়েড এনডিকে ভার্সন r22 বা তার কম সংস্করণের সাথে ১৬টি কেবি-সামঞ্জস্যপূর্ণ শেয়ার্ড লাইব্রেরি কম্পাইল করতে, আপনার ndk-build অথবা cmake কনফিগারেশনটি নিম্নরূপ আপডেট করুন:

ndk-বিল্ড

১৬ কিলোবাইট সামঞ্জস্যপূর্ণ ELF তৈরি করতে আপনার Android.mk আপডেট করুন:

LOCAL_LDFLAGS += "-Wl,-z,max-page-size=16384"
LOCAL_LDFLAGS += "-Wl,-z,common-page-size=16384"

সিমেক

১৬ কিলোবাইট সামঞ্জস্যপূর্ণ ELF তৈরি করতে আপনার CMakeLists.txt আপডেট করুন:

target_link_options(${CMAKE_PROJECT_NAME} PRIVATE "-Wl,-z,max-page-size=16384")
target_link_options(${CMAKE_PROJECT_NAME} PRIVATE "-Wl,-z,common-page-size=16384")

কোড ঠিক করুন এবং রানটাইম সমস্যা সমাধান করুন

আপনার অ্যাপটি ১৬ কেবি-সারিবদ্ধ হলেও, আপনার কোডের কিছু অংশ যদি ধরে নেয় যে কোনও ডিভাইস একটি নির্দিষ্ট পৃষ্ঠার আকার ব্যবহার করছে তবে আপনার অ্যাপটি ত্রুটির সম্মুখীন হতে পারে। এটি এড়াতে, নিম্নলিখিত পদক্ষেপগুলি অনুসরণ করুন:

  1. PAGE_SIZE ধ্রুবক উল্লেখ করে এমন যেকোনো হার্ড-কোডেড নির্ভরতা বা আপনার কোড লজিকের এমন উদাহরণগুলি সরিয়ে ফেলুন যা ধরে নেয় যে একটি ডিভাইসের পৃষ্ঠার আকার 4 KB ( 4096 )।

    পরিবর্তে getpagesize() অথবা sysconf(_SC_PAGESIZE) ব্যবহার করুন।

  2. mmap() এবং অন্যান্য API-এর ব্যবহারগুলি সন্ধান করুন যার জন্য পৃষ্ঠা-সারিবদ্ধ আর্গুমেন্টের প্রয়োজন হয় এবং প্রয়োজনে বিকল্পগুলি দিয়ে প্রতিস্থাপন করুন।

কিছু ক্ষেত্রে, যদি আপনার অ্যাপটি PAGE_SIZE একটি সুবিধাজনক মান হিসেবে ব্যবহার করে যা অন্তর্নিহিত পৃষ্ঠার আকারের সাথে সংযুক্ত নয়, তাহলে 16 KB মোডে ব্যবহার করার সময় এটি আপনার অ্যাপটিকে ভাঙবে না। তবে, যদি এই মানটি MAP_FIXED ছাড়া mmap দিয়ে কার্নেলে পাস করা হয়, তবে কার্নেলটি এখনও একটি সম্পূর্ণ পৃষ্ঠা ব্যবহার করে, যা কিছু মেমরি নষ্ট করে। এই কারণে, NDK r27 এবং উচ্চতর সংস্করণে 16 KB মোড সক্রিয় থাকলে PAGE_SIZE অনির্ধারিত থাকে।

যদি আপনার অ্যাপটি এইভাবে PAGE_SIZE ব্যবহার করে এবং সরাসরি এই মানটি কার্নেলে প্রেরণ না করে, তাহলে PAGE_SIZE ব্যবহার করার পরিবর্তে, একটি নতুন নাম সহ একটি নতুন ভেরিয়েবল তৈরি করুন যাতে এটি অন্য উদ্দেশ্যে ব্যবহৃত হয় এবং একটি প্রকৃত মেমরি পৃষ্ঠা প্রতিফলিত করে না।

১৬ কেবি সাপোর্টের জন্য SDK গুলি পরীক্ষা করুন

অনেক SDK ১৬ KB পৃষ্ঠার আকারের সাথে সামঞ্জস্যপূর্ণ, বিশেষ করে যদি আপনি নিজে তৈরি করেন অথবা সাম্প্রতিক প্রি-বিল্ট ব্যবহার করেন। তবে, যেহেতু কিছু SDK প্রি-বিল্ট বা SDK সংস্করণ ১৬ KB সামঞ্জস্যপূর্ণ নয়, তাই ১৬ KB সহ কোন সংস্করণ ব্যবহার করবেন তা নির্ধারণ করার জন্য আপনার প্রতিটি SDK প্রদানকারীর ওয়েবসাইটটি পরীক্ষা করা উচিত।

১৬ কেবি পরিবেশে আপনার অ্যাপটি পরীক্ষা করুন

১৬ কিলোবাইট ডিভাইসের জন্য সাপোর্ট দিয়ে অ্যাপ তৈরি করার পর, আপনার অ্যাপটি ১৬ কিলোবাইট পরিবেশে পরীক্ষা করে দেখতে হবে যে আপনার অ্যাপটিতে কোনও রিগ্রেশন হচ্ছে কিনা। এটি করার জন্য, এই পদক্ষেপগুলি অনুসরণ করুন:

  1. Android 15 SDK বা তার উচ্চতর সংস্করণ সেট আপ করুন।

  2. নিম্নলিখিত পরীক্ষার পরিবেশগুলির মধ্যে একটি সেট আপ করুন:

  3. আপনার পরীক্ষামূলক ডিভাইসটি শুরু করুন, তারপর এটি 16 KB পরিবেশ ব্যবহার করছে কিনা তা যাচাই করতে নিম্নলিখিত কমান্ডটি চালান:

    adb shell getconf PAGE_SIZE
    

    কমান্ডটির মান 16384 ফেরত দেওয়া উচিত।

  4. আপনার অ্যাপটি ১৬ কেবি-সারিবদ্ধ কিনা তা যাচাই করতে নিম্নলিখিত zipalign কমান্ডটি চালান, যেখানে APK_NAME হল আপনার অ্যাপের APK ফাইলের নাম:

    zipalign -c -P 16 -v 4 APK_NAME.apk
    
  5. নির্দিষ্ট পৃষ্ঠার আকার উল্লেখ করে কোড ইনস্ট্যান্স পরিবর্তনের ফলে প্রভাবিত হতে পারে এমন যেকোনো ক্ষেত্রগুলিতে মনোযোগ দিয়ে আপনার অ্যাপটি পুঙ্খানুপুঙ্খভাবে পরীক্ষা করুন।

১৬-কেবি-ভিত্তিক, অ্যান্ড্রয়েড ১৫ সিস্টেম ইমেজ সহ অ্যান্ড্রয়েড এমুলেটর সেট আপ করুন।

অ্যান্ড্রয়েড এমুলেটর ব্যবহার করে ১৬ কিলোবাইট পরিবেশ সেট আপ করতে, এই পদক্ষেপগুলি অনুসরণ করুন:

  1. ১৬-কেবি-ভিত্তিক, অ্যান্ড্রয়েড ১৫ এমুলেটর সিস্টেমের ছবিগুলি অ্যান্ড্রয়েড স্টুডিও জেলিফিশ | ২০২৩.৩.১ বা তার বেশি সংস্করণের সাথে সামঞ্জস্যপূর্ণ। তবে, ১৬ কেবি ডিভাইসের সাথে কাজ করার সময় সেরা অভিজ্ঞতার জন্য, অ্যান্ড্রয়েড স্টুডিও লেডিবাগ | ২০২৪.২.১ বা তার বেশি সংস্করণ ব্যবহার করুন।

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

    মনে রাখবেন যে আপনি আপনার বিদ্যমান অ্যান্ড্রয়েড স্টুডিও সংস্করণটি ইনস্টল করে রাখতে পারেন, কারণ আপনি পাশাপাশি একাধিক সংস্করণ ইনস্টল করতে পারেন।

  2. অ্যান্ড্রয়েড স্টুডিওতে, টুলস > এসডিকে ম্যানেজার এ ক্লিক করুন।

  3. SDK Platforms ট্যাবে, Show Package Details চেক করুন, তারপর Android VanillaIceCream বা উচ্চতর বিভাগটি প্রসারিত করুন এবং আপনি যে ভার্চুয়াল ডিভাইসগুলি তৈরি করতে চান তার উপর নির্ভর করে নিম্নলিখিত এমুলেটর সিস্টেম চিত্রগুলির মধ্যে একটি বা উভয় নির্বাচন করুন:

    • গুগল এপিআই পরীক্ষামূলক ১৬ কিলোবাইট পৃষ্ঠার আকার এআরএম ৬৪ ভি৮এ সিস্টেম চিত্র
    • গুগল এপিআই পরীক্ষামূলক ১৬ কিলোবাইট পৃষ্ঠার আকার ইন্টেল x86_64 অ্যাটম সিস্টেম চিত্র
    SDK ম্যানেজার ব্যবহার করে 16 KB এমুলেটর সিস্টেমের ছবি ডাউনলোড করুন  অ্যান্ড্রয়েড স্টুডিও
  4. আপনার নির্বাচিত সিস্টেমের ছবি ডাউনলোড করতে প্রয়োগ করুন > ঠিক আছে ক্লিক করুন।

  5. Android 15 এর জন্য একটি ভার্চুয়াল ডিভাইস সেট আপ করার ধাপগুলি অনুসরণ করুন, এবং যখন একটি সিস্টেম ইমেজ নির্বাচন করার অনুরোধ জানানো হবে, তখন আপনার ডাউনলোড করা 16 KB সিস্টেম ইমেজটি নির্বাচন করুন। যদি এটি স্বয়ংক্রিয়ভাবে সুপারিশ করা না হয়, তাহলে আপনি অন্যান্য ছবি ট্যাবে 16 KB সিস্টেম ইমেজটি খুঁজে পেতে পারেন।

    অন্যান্য ছবি ট্যাবে ১৬ কিলোবাইট এমুলেটর ছবিটি খুঁজুন।

কিছু এমুলেটর সংস্করণ এবং সিস্টেম চিত্রের জন্য অতিরিক্ত পদক্ষেপ

অ্যান্ড্রয়েড এমুলেটর সংস্করণ ৩৫.১.৫ থেকে ৩৫.১.২০ পর্যন্ত, এবং SDK ম্যানেজারে প্রদত্ত অ্যান্ড্রয়েড ১৫.০ ১৬ কিলোবাইট পৃষ্ঠা আকারের সিস্টেম চিত্রগুলির ৪ নম্বর সংস্করণের আগে, x86_64 সিস্টেমে ১৬ কিলোবাইট পরিবেশ অনুকরণ করার জন্য, আপনাকে নিম্নলিখিত পদক্ষেপগুলিও সম্পূর্ণ করতে হবে। ৩৫.১.২১ সংস্করণের পরে এবং অ্যান্ড্রয়েড ১৫.০ ১৬ কিলোবাইট পৃষ্ঠা আকারের সিস্টেম চিত্রগুলির ৪ নম্বর সংস্করণের সাথে বা তার পরবর্তী সংস্করণের জন্য এই পদক্ষেপগুলির প্রয়োজন নেই।

  1. ডিভাইস ম্যানেজারে, ১৬ কিলোবাইট ছবির পাশে থাকা ৩টি বিন্দুতে ক্লিক করুন, তারপর Show on Disk এ ক্লিক করুন।
  2. এই ফোল্ডারে, config.ini ফাইলটি খুঁজুন।
  3. config.ini ফাইলে নিম্নলিখিত লাইনটি যোগ করুন এবং আপনার পরিবর্তনগুলি সংরক্ষণ করুন:

    kernel.parameters = androidboot.page_shift=14
    
  4. আপনার পরিবর্তনগুলি যাচাই করতে, নিম্নলিখিত কমান্ডটি চালান, যা 16384 ফেরত দেবে:

    adb shell getconf PAGE_SIZE
    

এমুলেটরটি চালু করুন

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

বিকাশকারী বিকল্পগুলি ব্যবহার করে একটি ডিভাইসে 16 KB মোড সক্ষম করুন৷

16 KB মোডে একটি ডিভাইস বুট করতে 16KB পৃষ্ঠা আকারের বিকাশকারী বিকল্পের সাথে বুটটি টগল করুন।

Android 15 QPR1 দিয়ে শুরু করে, আপনি ডিভাইসটিকে 16 KB মোডে বুট করতে এবং ডিভাইসে পরীক্ষা করার জন্য নির্দিষ্ট ডিভাইসে উপলব্ধ ডেভেলপার বিকল্পটি ব্যবহার করতে পারেন। বিকাশকারী বিকল্পটি ব্যবহার করার আগে, সেটিংস > সিস্টেম > সফ্টওয়্যার আপডেটগুলিতে যান এবং উপলব্ধ যে কোনও আপডেট প্রয়োগ করুন।

এই বিকাশকারী বিকল্পটি নিম্নলিখিত ডিভাইসগুলিতে উপলব্ধ:

  • Pixel 8 এবং 8 Pro (Android 15 QPR1 বা উচ্চতর সহ)

  • Pixel 8a (Android 15 QPR1 বা উচ্চতর সহ)

  • Pixel 9, 9 Pro, এবং 9 Pro XL (Android 15 QPR2 বিটা 2 বা উচ্চতর সহ)

১৬ কেবি ব্যাককম্প্যাট মোড

পৃষ্ঠার আকারের কম্প্যাট মোডে সতর্কতা

পৃষ্ঠার আকারের কম্প্যাট মোডে সতর্কতা

১৬ কিলোবাইট কার্নেল দিয়ে যখন কোনও ডিভাইস চলছে তখন ১৬ কিলোবাইট ব্যাককম্প্যাট বিকল্পটি পাওয়া যায়। নিম্নলিখিত শর্তগুলি পূরণ হলে প্যাকেজ ম্যানেজার ১৬ কিলোবাইট ব্যাককম্প্যাট মোডে একটি অ্যাপ চালায়:

  • যদি অ্যাপটিতে ELF ফাইল থাকে ( .so এক্সটেনশন সহ) যার LOAD সেগমেন্ট অ্যালাইনমেন্ট 4 KB।
  • যদি জিপ করা APK-তে 4 KB জিপ সারিবদ্ধ আনকম্প্রেসড ELF ফাইল থাকে।

যদি প্যাকেজ ম্যানেজার কোন অ্যাপের জন্য ১৬ কিলোবাইট ব্যাককম্প্যাট মোড সক্রিয় করে থাকে, তাহলে অ্যাপটি প্রথমবার চালু হওয়ার সময় একটি সতর্কতা প্রদর্শন করে যে এটি ১৬ কিলোবাইট ব্যাককম্প্যাট মোডে চলছে।

১৬ কেবি ব্যাককম্প্যাট মোড কিছু অ্যাপকে কাজ করার অনুমতি দেয়, তবে সর্বোত্তম নির্ভরযোগ্যতা এবং স্থিতিশীলতার জন্য, অ্যাপগুলিকে এখনও ১৬ কেবি সারিবদ্ধ করা উচিত।

অ্যাপ তথ্য পৃষ্ঠায়, অ্যাডভান্সড এর অধীনে, নির্দিষ্ট অ্যাপের জন্য 16 KB ব্যাককম্প্যাট মোড সক্ষম বা অক্ষম করতে Run app with page size compat mode সেটিংটি টগল করুন। এই সেটিংটি কেবল তখনই দৃশ্যমান যখন ডিভাইসটি 16 KB পৃষ্ঠা আকারের সাথে চলছে।

পৃষ্ঠার আকার কম্প্যাট মোড সেটিং

পৃষ্ঠার আকার কম্প্যাট মোড সেটিং

ডিভাইসের প্রতিটি অ্যাপের জন্য জোর করে ১৬ কেবি ব্যাককম্প্যাট চালু করতে:

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

AndroidManifest.xml এ একটি নির্দিষ্ট অ্যাপের জন্য ব্যাককম্প্যাট মোড চালু বা বন্ধ করার জন্য android:pageSizeCompat প্রোপার্টিটিকে enabled অথবা disabled এ সেট করুন। এই প্রোপার্টিটি সেট করা থাকলে, অ্যাপটি চালু হওয়ার সময় ব্যাককম্প্যাট মোড সতর্কতা প্রদর্শন করবে না।

গুগল প্লে সামঞ্জস্যের প্রয়োজনীয়তা

ডিভাইস নির্মাতারা যখন পারফরম্যান্স অপ্টিমাইজ করার জন্য ডিভাইসগুলিকে আরও RAM দিয়ে সজ্জিত করে, তখন অনেকেই 16 KB এর মতো বড় পৃষ্ঠার আকার গ্রহণ করবে। আসন্ন এই ডিভাইসগুলির লঞ্চের জন্য প্রস্তুতি নিতে, Google Play একটি নতুন সামঞ্জস্যের প্রয়োজনীয়তা প্রবর্তন করছে: 1 নভেম্বর, 2025 থেকে, সমস্ত নতুন অ্যাপ এবং Google Play-তে জমা দেওয়া বিদ্যমান অ্যাপগুলির আপডেট এবং Android 15 (API লেভেল 35) এবং উচ্চতর ভার্সনগুলিতে চলমান ডিভাইসগুলিকে লক্ষ্য করে 16 KB পৃষ্ঠার আকার সমর্থন করতে হবে।

এই সামঞ্জস্যের প্রয়োজনীয়তা সম্পর্কে আরও জানতে, এই ব্লগ পোস্টটি দেখুন।