ইনক্রিমেন্টাল ফাইল সিস্টেম

Android 11-এ ইনক্রিমেন্টাল ফাইল সিস্টেম (IncFS) কার্নেল মডিউল চালু করা হয়েছে যা Android OS-কে Android Debug Bridge (ADB)-এর মাধ্যমে স্ট্রিম করা APK গ্রহণ করতে দেয়।

এই স্বয়ংসম্পূর্ণ কার্নেল মডিউল একটি নতুন ভার্চুয়াল ফাইল সিস্টেম তৈরি করে যা আগে থেকে থাকা Android ফাইল সিস্টেমের উপরে থাকে। এটি ফ্রেমওয়ার্ক ও SDK-তে করা পরিবর্তনকে সম্পূর্ণ করে যাতে অ্যাপ ও গেম ডেভেলপাররা ADB-এর মাধ্যমে Android ১১ বা তার পরবর্তী ভার্সনে চলা ডিভাইসে বড় APK ডেপ্লয় করতে পারেন।

কার্নেল পরিবর্তন একটি নতুন APK Signature Scheme v4 ফর্ম্যাট চালু করে এবং Android Package Manager-এ Android ফ্রেমওয়ার্ক পরিবর্তন, নতুন সিস্টেম সার্ভিস এবং ADB-তে পরিবর্তনকে সমর্থন করে।

প্রয়োগ

IncFS প্রয়োগ করতে, OEM এবং SoC প্রস্তুতকারকদের অবশ্যই তাদের Android ডিভাইস বিল্ডে একটি নতুন কার্নেল ড্রাইভার যোগ করতে হবে।

শুধুমাত্র Android 11-এর জন্য, যদি কার্নেল ড্রাইভার মডিউল হিসেবে তৈরি করা হয়, তাহলে এটি চাহিদা অনুযায়ী লোড করা হয়। ADB ইনক্রিমেন্টাল ইনস্টলেশনের মাধ্যমে কোনও অ্যাপ ইনস্টল করা না থাকলে, ডিভাইস কার্নেল ড্রাইভার লোড করে না।

অন্যথায়, এটি কার্নেল ইমেজের অংশ হিসেবে তৈরি হলে, ড্রাইভার সবসময় লোড করা হয়। এই প্রয়োগ Android 12 ও তার পরবর্তী যেকোনও ভার্সনের জন্য বৈধ এবং Android 11-এর সাথে ব্যবহার করা যেতে পারে। Android 12-এ কার্নেল ড্রাইভার আপগ্রেড করা সম্পর্কে আরও জানতে, কার্নেল ড্রাইভার আপগ্রেড লিঙ্কে দেখুন।

স্ট্রিম করা APK ইনস্টলেশন চালু করার জন্য কার্নেল ড্রাইভার একটি বৃহত্তর সিস্টেমের অংশ। OEM এবং ভেন্ডরদের স্যাম্পেল ইমপ্লিমেন্টেশনে দেওয়া সঠিক IncFS কোড ব্যবহার করতে হবে না। তবে, বিভিন্ন ডিভাইস জুড়ে একই ধরনের অভিজ্ঞতা নিশ্চিত করতে, আপনাকে অবশ্যই নিশ্চিত করতে হবে যে API প্রয়োগে এমন একটি ফাইল সিস্টেম রয়েছে যাতে ইনক্রিমেন্টাল FS-এর জন্য ইউজারস্পেস ইন্টারফেস ডকুমেন্টে সংজ্ঞায়িত ফাইল-রিড ফাংশনালিটি এবং ডিরেক্টরি রিড-রাইট ফাংশনালিটি রয়েছে।

এছাড়াও, প্রয়োগের ক্ষেত্রে মাউন্ট করার বিকল্প এবং বিশেষ ফাইল থাকতে হবে যা IncFS স্যাম্পেল প্রয়োগের সাথে ফাংশনালি মেলে।

প্রয়োগ করার জন্য প্রয়োজনীয় পরিবর্তনগুলি নিচে উল্লেখ করা হল:

  1. কার্নেল তৈরি করতে ডেভেলপমেন্ট মেশিন সেট-আপ করুন।
  2. common-android-mainline ব্রাঞ্চ থেকে সাধারণ কার্নেল টার্গেট করুন।
    repo init -u https://android.googlesource.com/kernel/manifest -b common-android-mainline
    repo sync
  3. IncFS-এর জন্য প্রয়োজনীয় নিম্নলিখিত পরিবর্তনগুলি ব্রাঞ্চ চেক-আউটে আছে কিনা তা যাচাই করুন:
  4. শুধুমাত্র Android 11-এর জন্য CONFIG_INCREMENTAL_FS=y অথবা defconfig ফাইলের নিচে CONFIG_INCREMENTAL_FS=m যোগ করুন। উদাহরণ দেখতে, নিচে দেওয়া লিঙ্কগুলির মধ্যে একটিতে ক্লিক করুন:
  5. কার্নেল তৈরি করুন
  6. Android ডিভাইস ইমেজ বিল্ডে কার্নেল এম্বেড করুন।
  7. আপনার টার্গেট Android ডিভাইসের জন্য, নিম্নলিখিত ভেন্ডর-নির্দিষ্ট সিস্টেম-প্রপার্টি লাইনগুলির মধ্যে একটি আপনার device.mk ফাইলে (Android 12 ও তার পরের যেকোনও ভার্সনে লঞ্চ করা ডিভাইসে ঐচ্ছিক) যোগ করুন:
  8. CONFIG_INCREMENTAL_FS=y ব্যবহার করার সময়, ফাইলটি এর সাথে অ্যাটাচ করুন:

    • PRODUCT_PROPERTY_OVERRIDES += \
    • ro.incremental.enable=yes

    আপনি CONFIG_INCREMENTAL_FS=m (শুধুমাত্র Android 11-এর জন্য) ব্যবহার করলে, এইসবের মধ্যে একটির সাথে ফাইলটি যোগ করুন:

    • PRODUCT_PROPERTY_OVERRIDES += \
    • ro.incremental.enable=module:/vendor/lib/modules/incrementalfs.ko
  9. Android ইমুলেটর ও Pixel 4-এর জন্য device.mk ফাইলের উদাহরণ দেখুন।
  10. শুধুমাত্র Android 11-এর জন্য: আপনি CONFIG_INCREMENTAL_FS=m ব্যবহার করলে, SE Linux Rules যোগ করুন।
  11. নিচের কন্টেন্ট সহ আপনার ডিভাইসের /system/sepolicy/vendor ফোল্ডারে একটি vold.te ফাইল তৈরি করে যোগ করুন:

    • vold.te

    ইনক্রিমেন্টাল ফাইল সিস্টেম ড্রাইভার লোড করার অনুমতি দিন:

    • allow vold self:capability sys_module;
    • allow vold vendor_incremental_module:file r_file_perms;
    • allow vold vendor_incremental_module:system module_load;

    আপনার /system/sepolicy/vendor ফোল্ডারে খুঁজে পাওয়া আগে থেকে থাকা file.te ফাইলে নিম্নলিখিত SE Linux নিয়ম যোগ করুন:

    • file.te ফাইল - উদাহরণ হিসেবে এই file.te ফাইল দেখুন।)
    • ইনক্রিমেন্টাল ফাইল সিস্টেম ড্রাইভার
    • type vendor_incremental_module, vendor_file_type, file_type;

    আপনার /system/sepolicy/vendor ফোল্ডারে থাকা আগে থেকে থাকা file_contents ফাইলে নিম্নলিখিত SE Linux নিয়ম যোগ করুন:

কার্নেল ড্রাইভার আপগ্রেড

Android 12-এ আপগ্রেড করা ডিভাইসে IncFS ড্রাইভারের পুরনো ভার্সন থাকতে পারে। সেইসব ডিভাইসের জন্য, AOSP সাজেস্ট করে যে আপনি IncFS ড্রাইভারকে বর্তমান ভার্সনে (এই ক্ষেত্রে v2) আপডেট করুন, কারণ:

  • Android 11-এর সাথে রিলিজ করা ভার্সন হল IncFS-এর প্রাথমিক প্রয়োগ যা শুধুমাত্র ADB ইনস্টলেশন সহায়তার জন্য টার্গেট করা হয়েছে।
  • Android 12, Play গেমের স্ট্রিমিং ইনস্টলেশনের জন্য IncFS ড্রাইভার ব্যবহার করে, যার জন্য ব্যবহারকারীর আরও ভালো অভিজ্ঞতার জন্য IncFS v2-এর নতুন ফিচার এবং অপ্টিমাইজেশন প্রয়োজন।
  • V1-এ গেম স্ট্রিমিং কাজ করে, তবে পারফর্ম্যান্সের ক্ষেত্রে কিছু সমস্যা হয় এবং v2-এর তুলনায় ব্যাটারি, সিপিইউ (CPU) ও র‍্যাম (RAM) বেশি ব্যবহার হয়।
  • V2 ভার্সন স্ট্রিমিংয়ের জন্য উন্নত UX প্রদান করে, যার মধ্যে রয়েছে মসৃণ প্রগ্রেস অ্যানিমেশন, ডিস্ক স্পেসের ব্যবহার সংক্রান্ত সঠিক রিপোর্ট এবং থার্ড-পার্টি অ্যাপের স্ট্রিমিং হস্তক্ষেপ প্রতিরোধ করা।

আপনার কার্নেলে IncFS ড্রাইভার আপগ্রেড করতে, নিম্নলিখিত প্যাচগুলি কার্নেল 4.14 বা কার্নেল 4.19-এর জন্য প্রয়োগ করুন:

অন্যান্য কাস্টম কার্নেল ভার্সনের জন্য, একটি প্যাচসেট পোর্ট করুন। এগুলি শুধুমাত্র fs/incfs ডিরেক্টরিকে প্রভাবিত করে এবং আগে থেকে থাকা v1 কোডে সঠিকভাবে প্রয়োগ করা হয়।

আসলটির মতো একই পদ্ধতিতে IncFS ড্রাইভার ব্যবহার করা চালিয়ে যান, তবে এখন আপগ্রেড করা Android 11-এ, হয় কার্নেল ইমেজের বিল্ট-ইন অংশ হিসেবে, অথবা আলাদা মডিউল হিসেবে। সিস্টেম বোর্ড বা সিস্টেম প্রপার্টি কনফিগারেশন পরিবর্তন করবেন না।

GKI কার্নেল ইমেজ ব্যবহার করা নতুন ডিভাইস অটোমেটিক লেটেস্ট (v2) IncFS ড্রাইভার পায়, যা কার্নেল ইমেজের অংশ হিসেবে কনফিগার করা হয়। এর জন্য কোনও অতিরিক্ত ধাপের প্রয়োজন নেই।

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

রেফারেন্স ইমপ্লিমেন্টেশন

এই প্রয়োগকে হয় কার্নেল ইমেজের অংশ হিসেবে অথবা (শুধুমাত্র Android 11-এর জন্য) লোড করা যায় এমন মডিউল হিসেবে বিবেচনা করা যেতে পারে।

লোড করা যায় এমন মডিউল (Pixel 4 ডিভাইস) Android Emulator (কার্নেল ইমেজের অংশ হিসেবে)

যাচাইকরণ ও টেস্টিং

ফিচার ইউনিট টেস্ট, CTS এবং GTS ব্যবহার করে ইমপ্লিমেন্টেশন যাচাই করুন।

CTS

CtsIncrementalInstallHostTestCases ব্যবহার করুন।

GTS

atest GtsIncrementalInstallTestCases:

/gts-tests/tests/packageinstaller/incremental/src/com/google/android/packageinstaller/incremental/gts/IncrementalInstallerTest.java

IncFS পরীক্ষা করুন

  1. ডেভেলপমেন্ট এনভায়রনমেন্ট সেট-আপ করুন।
  2. ইমপ্লিমেন্টেশন বিভাগে উল্লেখ করা ইমপ্লিমেন্টেশন টাস্ক সম্পূর্ণ করুন।
  3. নিম্নলিখিত ম্যানুয়াল পরীক্ষাগুলি চালান:
    mmma system/incremental_delivery/incfs/tests
    atest libincfs-test
    atest IncrementalServiceTest
    atest PackageManagerShellCommandTest
    PackageManagerShellCommandIncrementalTest

Android SDK (ADB ও apksigner) দিয়ে IncFS পরীক্ষা করা

  • ডেভেলপমেন্ট এনভায়রনমেন্ট সেট-আপ করুন।
  • ইমপ্লিমেন্টেশন বিভাগে উল্লেখ করা ইমপ্লিমেন্টেশন টাস্ক সম্পূর্ণ করুন।
  • টার্গেট ফিজিক্যাল ডিভাইস বা এমুলেটরে বিল্ড ফ্ল্যাশ করুন।
  • আগে থেকে থাকা APK জেনারেট বা সংগ্রহ করুন।
  • ডিবাগ সই করার কী তৈরি করুন।
  • build-tools ফোল্ডার থেকে v4 স্বাক্ষর ফর্ম্যাট সহ APK স্বাক্ষর করুন।
    ./apksigner sign --ks debug.keystore game.apk
  • ডিভাইসে platform-tools ফোল্ডার থেকে APK ইনস্টল করুন।
    ./adb install game.apk
ইনস্টল করার উদাহরণ
ছবি ১: ইনস্টল করার উদাহরণ

এইসব পরীক্ষা খুঁজে দেখুন