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

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

ঐতিহাসিকভাবে, অ্যান্ড্রয়েড শুধুমাত্র 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) ব্যবহার করে, তাহলে আপনার অ্যাপ নেটিভ কোড ব্যবহার করে।
  • আপনার অ্যাপটি এমন যেকোনো থার্ড-পার্টি নেটিভ লাইব্রেরি বা ডিপেন্ডেন্সি (যেমন এসডিকে)-এর সাথে লিঙ্ক করে, যেগুলো সেগুলো ব্যবহার করে।
  • আপনার অ্যাপটি একটি থার্ড-পার্টি অ্যাপ বিল্ডার দ্বারা তৈরি, যা ডিভাইসের নেটিভ লাইব্রেরি ব্যবহার করে।

APK অ্যানালাইজার ব্যবহার করে নেটিভ লাইব্রেরি শনাক্ত করুন

এপিকে অ্যানালাইজার এমন একটি টুল যা দিয়ে একটি তৈরি করা এপিকে-র বিভিন্ন দিক মূল্যায়ন করা যায়। আপনার অ্যাপটি নেটিভ কোড ব্যবহার করছে কিনা তা পরীক্ষা করতে (সেটি ১৬ কেবি-র সাথে সামঞ্জস্যপূর্ণ হোক বা না হোক):

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

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

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

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

স্বয়ংক্রিয় চেকের মাধ্যমে অ্যালাইনমেন্টের সমস্যা সনাক্ত করুন

আপনার প্রি-বিল্ট লাইব্রেরি বা APK-গুলো ১৬ KB-এর কম সাইজের না হলে Android Studio আপনাকে আগে থেকেই সতর্ক করে দেয়। কোন লাইব্রেরিগুলো আপডেট করা প্রয়োজন বা কোডে কোনো পরিবর্তনের দরকার আছে কিনা, তা পর্যালোচনা করতে APK Analyzer টুলটি ব্যবহার করুন।

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

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

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

শেয়ার করা লাইব্রেরিগুলির জন্য ELF সেগমেন্টগুলির অ্যালাইনমেন্ট পরীক্ষা করুন।

যেকোনো শেয়ার্ড লাইব্রেরির ক্ষেত্রে, ১৬ কেবি ইএলএফ অ্যালাইনমেন্ট ব্যবহার করে যাচাই করুন যে সেগুলোর ইএলএফ সেগমেন্টগুলো সঠিকভাবে অ্যালাইন করা আছে। আপনি যদি লিনাক্স বা ম্যাকওএস-এ ডেভেলপ করেন, তাহলে পরবর্তী বিভাগে বর্ণিত 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. Android Studio-এর SDK Manager অথবা sdkmanager কমান্ড-লাইন টুল ব্যবহার করে নিশ্চিত করুন যে Android SDK Build-Tools ভার্সন 35.0.0 বা তার চেয়ে উচ্চতর এবং Android 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 ফাইলটি যে টেম্পোরারি ডিরেক্টরিতে এক্সট্র্যাক্ট করেছেন, সেখানকার lib ডিরেক্টরিতে শেয়ার্ড অবজেক্ট ( .so ) ফাইলগুলো খুঁজুন। APK Analyzer ব্যবহার করে নেটিভ লাইব্রেরি শনাক্ত করার সময় আপনি যে শেয়ার্ড অবজেক্ট ফাইলগুলো দেখেছিলেন, এগুলো ঠিক সেই ফাইলগুলোই। প্রতিটি শেয়ার্ড অবজেক্ট ফাইলের উপর নিম্নলিখিত কমান্ডটি চালান:

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

    SDK_ROOT_LOCATION/Android/sdk/ndk/NDK_VERSION/toolchains/llvm/prebuilt/darwin-x86_64/bin/llvm-objdump -p SHARED_OBJECT_FILE.so | grep LOAD
    

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

    SDK_ROOT_LOCATION\Android\sdk\ndk\NDK_VERSION\toolchains\llvm\prebuilt\windows-x86_64\bin\llvm-objdump.exe -p SHARED_OBJECT_FILE.so | Select-String -Pattern "LOAD"
    

    এখানে SDK_ROOT_LOCATION হলো সেই ডিরেক্টরির পাথ যেখানে আপনি অ্যান্ড্রয়েড SDK ইনস্টল করেছেন, SHARED_OBJECT_FILE হলো সেই শেয়ার্ড অবজেক্ট ফাইলের নাম যা আপনি পরীক্ষা করছেন, এবং NDK_VERSION হলো আপনার ইনস্টল করা অ্যান্ড্রয়েড NDK-এর ভার্সন (উদাহরণস্বরূপ, 28.0.12433566 )। আপনার পরীক্ষা করা প্রতিটি ফাইলের জন্য আউটপুটটি নিচের মতো দেখাবে:

    LOAD off    0x0000000000000000 vaddr 0x0000000000000000 paddr 0x0000000000000000 align 2**14
    LOAD off    0x0000000000042a90 vaddr 0x0000000000043a90 paddr 0x0000000000043a90 align 2**14
    LOAD off    0x0000000000046230 vaddr 0x0000000000048230 paddr 0x0000000000048230 align 2**14
    
  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 হলো সেই ডিরেক্টরির পাথ যেখানে আপনি অ্যান্ড্রয়েড এসডিকে ইনস্টল করেছেন, এবং APK_NAME হলো আপনার অ্যাপের APK ফাইলের নাম। যদি সমস্ত শেয়ার্ড লাইব্রেরি সঠিকভাবে সাজানো থাকে, তাহলে আউটপুটের শেষ লাইনে "Verification successful" লেখা থাকবে।

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

১৬ কেবি ডিভাইস সমর্থন সহ আপনার অ্যাপ তৈরি করুন।

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

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

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

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

জিপ অ্যালাইনমেন্ট যাচাই করতে bundletool ব্যবহার করুন

আপনার বান্ডেলের বিন্যাস দেখতে, ব্যবহার করুন:

bundletool dump config --bundle=<my .aab>  | grep alignment

যদি আপনি PAGE_ALIGNMENT_16K দেখতে পান, তাহলে বুঝবেন আপনার বান্ডেলটি ১৬ কেবি জিপ অ্যালাইনমেন্ট চাইছে। যদি আপনি PAGE_ALIGNMENT_4K দেখতে পান, তবে এটি এই AAB থেকে তৈরি APK-কে নির্দেশ দেয় যেন জিপ ফাইলের মধ্যে ৪ কেবি অ্যালাইনমেন্টে থাকা .so ফাইলগুলো থাকে।

এজিপি সংস্করণ ৮.৫.১ বা উচ্চতর

১৬ কেবি ডিভাইসের জন্য, আনকম্প্রেসড শেয়ার্ড লাইব্রেরি সহ আসা অ্যাপগুলিকে একটি ১৬ কেবি জিপ-অ্যালাইনড বাউন্ডারিতে অ্যালাইন করতে হয়। এটি করার জন্য, আপনাকে অ্যান্ড্রয়েড গ্রেডল প্লাগইন (AGP) সংস্করণ ৮.৫.১ বা তার উচ্চতর সংস্করণে আপগ্রেড করতে হবে। আপগ্রেড প্রক্রিয়া সম্পর্কে বিস্তারিত জানতে অ্যান্ড্রয়েড গ্রেডল প্লাগইন আপগ্রেড অ্যাসিস্ট্যান্ট বিভাগটি দেখুন।

এজিপি সংস্করণ ৮.৫ বা তার কম

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

গ্রুভি

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

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

কোটলিন

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

android {
  ...
  packagingOptions {
      jniLibs {
        useLegacyPackaging = true
      }
  }
}
এজিপি সংস্করণ ৮.০ বা তার কম

আপনি যদি 8.0 বা তার চেয়ে কম AGP সংস্করণ ব্যবহার করেন, তাহলে আপনাকে আপনার gradle.properties ফাইলে App Bundles-এর জন্য uncompressed native library অপশনটিও নিষ্ক্রিয় করতে হবে:

android.bundle.enableUncompressedNativeLibs=false

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

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

গেম ডেভেলপারদের জন্য, যদি আপনার গেমটি ইউনিটি (Unity) গেম ইঞ্জিনের উপর ভিত্তি করে চলে, তাহলে ইউনিটি (Unity) গাইডটি দেখুন। যদি আপনার গেমটি আনরিয়েল (Unreal) গেম ইঞ্জিনের উপর ভিত্তি করে চলে, তাহলে আনরিয়েল (Unreal) গাইডটি দেখুন। নেটিভ গেম ইঞ্জিনগুলোর জন্য, এই গাইডটি অনুসরণ করতে থাকুন।

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

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

NDK r28 এবং এর পরবর্তী সংস্করণগুলো ডিফল্টরূপে ১৬ কিলোবাইট-অ্যালাইনড কম্পাইল করে।

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

Android NDK সংস্করণ r27 এবং তার উচ্চতর সংস্করণে 16 KB-অ্যালাইনড শেয়ার্ড লাইব্রেরি কম্পাইল করা সমর্থন করার জন্য, আপনাকে আপনার ndk-build , build.gradle , build.gradle.kts , অথবা লিঙ্কার ফ্ল্যাগগুলি নিম্নরূপ আপডেট করতে হবে:

এনডিকে-বিল্ড

আপনার Application.mk তে:

APP_SUPPORT_FLEXIBLE_PAGE_SIZES := true

গ্রুভি

আপনার build.gradle ফাইলে, -DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON আর্গুমেন্টটি সেট করুন:

android {
  ...
  defaultConfig {
    ...
    // This block is different from the one you use to link Gradle
    // to your CMake or ndk-build script.
    externalNativeBuild {
      // For ndk-build, instead use the ndkBuild block.
      cmake {
        // Passes optional arguments to CMake.
        arguments "-DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON"
      }
    }
  }
}

কোটলিন

আপনার build.gradle.kts ফাইলে, -DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON আর্গুমেন্টটি সেট করুন:

android {
  ...
  defaultConfig {
    ...
    // This block is different from the one you use to link Gradle
    // to your CMake or ndk-build script.
    externalNativeBuild {
      // For ndk-build, instead use the ndkBuild block.
      cmake {
        // Passes optional arguments to CMake.
        arguments += listOf("-DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON")
      }
    }
  }
}

অন্যান্য বিল্ড সিস্টেম

নিম্নলিখিত লিঙ্কার ফ্ল্যাগগুলি নির্দিষ্ট করুন:

-Wl,-z,max-page-size=16384

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

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

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

এনডিকে-বিল্ড

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

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

CMake

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

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

অ্যান্ড্রয়েড এনডিকে আর২২ এবং এর পূর্ববর্তী সংস্করণগুলো সামঞ্জস্যপূর্ণ নয়।

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

NDK r26 এবং এর নিচের সংস্করণগুলোর জন্য গৃহীত পদক্ষেপগুলোর পাশাপাশি, common-page-size=16384 পুরোনো GNU ld এবং LLVM lld লিঙ্কারগুলোর বাগ সমাধান করা যেতে পারে। এটি কেবল তখনই কাজ করে, যদি ELF ফাইলটিতে একটি .relro_padding সেকশনও উপস্থিত থাকে। এটি লিঙ্কারের সংস্করণ এবং নির্দিষ্ট প্রোগ্রামটির উপর নির্ভর করে। এই NDK সংস্করণগুলোর জন্য কোনো সাপোর্ট নেই, এবং যদি এটি কাজ না করে, তবে কোনো সমস্যা জানানোর আগে NDK সংস্করণটি আপডেট করে নিন।

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

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

  1. আপনার কোড লজিকে থাকা PAGE_SIZE কনস্ট্যান্টকে নির্দেশ করে এমন যেকোনো হার্ড-কোডেড নির্ভরতা অথবা ডিভাইসের পেজ সাইজ 4 KB ( 4096 ) ধরে নেওয়া অংশগুলো সরিয়ে ফেলুন।

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

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

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

যদি আপনার অ্যাপ এইভাবে PAGE_SIZE ব্যবহার করে এবং এই মানটি সরাসরি কার্নেলে না পাঠায়, তাহলে PAGE_SIZE ব্যবহার না করে একটি নতুন নামে একটি নতুন ভেরিয়েবল তৈরি করুন। এর মাধ্যমে বোঝানো হবে যে এটি অন্য উদ্দেশ্যে ব্যবহৃত হচ্ছে এবং কোনো বাস্তব মেমরি পেজকে নির্দেশ করে না।

১৬ কেবি সমর্থনের জন্য এসডিকেগুলো যাচাই করুন।

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

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

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

  1. অ্যান্ড্রয়েড ১৫ এসডিকে বা উচ্চতর সংস্করণ সেট আপ করুন।

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

  3. আপনার টেস্ট ডিভাইসটি চালু করুন, তারপর এটি ১৬ কেবি এনভায়রনমেন্ট ব্যবহার করছে কিনা তা যাচাই করতে নিম্নলিখিত কমান্ডটি চালান:

    adb shell getconf PAGE_SIZE
    

    কমান্ডটির রিটার্ন ভ্যালু হওয়া উচিত 16384

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

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

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

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

  1. অ্যান্ড্রয়েড স্টুডিওতে, টুলস > এসডিকে ম্যানেজার-এ ক্লিক করুন।
  2. SDK Platforms ট্যাবে, Show Package Details চেক করুন, তারপর Android VanillaIceCream or higher সেকশনটি এক্সপ্যান্ড করুন এবং আপনি যে ভার্চুয়াল ডিভাইসগুলো তৈরি করতে চান তার উপর নির্ভর করে নিম্নলিখিত এমুলেটর সিস্টেম ইমেজগুলোর মধ্যে একটি বা উভয়টি সিলেক্ট করুন:

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

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

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

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

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

ডেভেলপার অপশন ব্যবহার করে একটি ডিভাইসে ১৬ কেবি মোড সক্ষম করুন

১৬ কেবি মোডে একটি ডিভাইস বুট করতে ১৬ কেবি পৃষ্ঠা আকারের ডেভেলপার বিকল্পটি টগল করুন।

অ্যান্ড্রয়েড ১৫ এর QPR সংস্করণগুলিতে, আপনি নির্দিষ্ট ডিভাইসে উপলব্ধ ডেভেলপার বিকল্পটি ব্যবহার করে ডিভাইসটিকে ১৬ KB মোডে বুট করতে এবং অন-ডিভাইস পরীক্ষা করতে পারেন। ডেভেলপার বিকল্পটি ব্যবহার করার আগে, সেটিংস > সিস্টেম > সফ্টওয়্যার আপডেটে যান এবং উপলব্ধ যেকোনো আপডেট প্রয়োগ করুন।

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

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

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

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

  • Pixel 9a (Android 16 বা তার উচ্চতর ভার্সন সহ)

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

পেজ সাইজ কম্প্যাটিবিলিটি মোডে সতর্কতা

পেজ সাইজ কম্প্যাটিবিলিটি মোডে সতর্কতা

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

  • যদি অ্যাপটিতে .so এক্সটেনশনযুক্ত ELF ফাইল থাকে এবং সেগুলোর লোড সেগমেন্ট অ্যালাইনমেন্ট ৪ কিলোবাইট হয়।
  • যদি জিপ করা APK-টিতে ৪ কিলোবাইট আকারের, জিপ অ্যালাইনড ও অসংকুচিত ELF ফাইল থাকে।

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

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

অ্যাপ ইনফো পেজে, অ্যাডভান্সড-এর অধীনে, নির্দিষ্ট অ্যাপের জন্য ১৬ কেবি ব্যাককম্প্যাট মোড চালু বা বন্ধ করতে ‘Run app with page size compat mode’ সেটিংটি টগল করুন। এই সেটিংটি শুধুমাত্র তখনই দেখা যাবে যখন ডিভাইসটি ১৬ কেবি পেজ সাইজে চলবে।

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

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

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

adb shell setprop bionic.linker.16kb.app_compat.enabled true
adb shell setprop pm.16kb.app_compat.disabled false

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

adb shell setprop bionic.linker.16kb.app_compat.enabled false
adb shell setprop pm.16kb.app_compat.disabled true

অ্যান্ড্রয়েড ১৭-এ, আপনি প্রতিটি অ্যাপের জন্য ১৬ কেবি ব্যাককম্প্যাট জোর করে বন্ধ করতে পারেন এবং যেকোনো বেমানান বাইনারিকে অবিলম্বে বন্ধ করে দিতে পারেন:

    adb shell setprop bionic.linker.16kb.app_compat.enabled fatal
    adb shell setprop pm.16kb.app_compat.disabled true

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

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

ডিভাইস নির্মাতারা পারফরম্যান্স অপ্টিমাইজ করার জন্য ডিভাইসগুলিতে আরও বেশি র‍্যাম যুক্ত করার ফলে, অনেকেই ১৬ কেবি-র মতো বড় পেজ সাইজ গ্রহণ করবে। এই আসন্ন ডিভাইসগুলির লঞ্চের জন্য প্রস্তুতি হিসেবে, গুগল প্লে একটি নতুন সামঞ্জস্যতার আবশ্যকতা চালু করছে: ১ নভেম্বর, ২০২৫ থেকে, গুগল প্লে-তে জমা দেওয়া সমস্ত নতুন অ্যাপ এবং বিদ্যমান অ্যাপের আপডেট, যা অ্যান্ড্রয়েড ১৫ (এপিআই লেভেল ৩৫) এবং তার উচ্চতর সংস্করণে চালিত ডিভাইসগুলির জন্য তৈরি, সেগুলিতে অবশ্যই ১৬ কেবি পেজ সাইজ সমর্থন করতে হবে।

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