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

অ্যান্ড্রয়েড ১১-এ প্রবর্তিত ইনক্রিমেন্টাল ফাইল সিস্টেম (IncFS) কার্নেল মডিউলটি অ্যান্ড্রয়েড অপারেটিং সিস্টেমকে অ্যান্ড্রয়েড ডিবাগ ব্রিজ (ADB)-এর মাধ্যমে স্ট্রিম করা APK গ্রহণ করতে সক্ষম করে।

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

কার্নেলের এই পরিবর্তনটি নতুন APK সিগনেচার স্কিম v4 ফরম্যাটকে সক্ষম করে এবং অ্যান্ড্রয়েড প্যাকেজ ম্যানেজারে অ্যান্ড্রয়েড ফ্রেমওয়ার্কের পরিবর্তন, নতুন সিস্টেম পরিষেবা এবং ADB-এর পরিবর্তনসমূহকে সমর্থন করে।

বাস্তবায়ন

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

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

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

কার্নেল ড্রাইভারটি স্ট্রিমড 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. defconfig ফাইলের শেষে CONFIG_INCREMENTAL_FS=y অথবা শুধুমাত্র Android 11-এর জন্য CONFIG_INCREMENTAL_FS=m যুক্ত করুন। উদাহরণ দেখতে, নিচের লিঙ্কগুলোর একটিতে ক্লিক করুন:
  5. কার্নেল তৈরি করুন
  6. অ্যান্ড্রয়েড ডিভাইস ইমেজ বিল্ডে কার্নেলটি অন্তর্ভুক্ত করুন।
  7. আপনার নির্দিষ্ট অ্যান্ড্রয়েড ডিভাইসের জন্য, আপনার device.mk ফাইলে নিম্নলিখিত বিক্রেতা-নির্দিষ্ট সিস্টেম-প্রপার্টি লাইনগুলির মধ্যে একটি যুক্ত করুন ( অ্যান্ড্রয়েড ১২ এবং তার পরবর্তী সংস্করণ দিয়ে চালু হওয়া ডিভাইসগুলির জন্য এটি ঐচ্ছিক ):
  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. অ্যান্ড্রয়েড এমুলেটর এবং পিক্সেল ৪-এর জন্য উদাহরণ device.mk ফাইলগুলো দেখুন।
  10. শুধুমাত্র অ্যান্ড্রয়েড ১১-এর জন্য : আপনি যদি 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) আপডেট করার সুপারিশ করে:

  • অ্যান্ড্রয়েড ১১-এর সাথে প্রকাশিত সংস্করণটি হলো IncFS-এর প্রাথমিক বাস্তবায়ন, যা শুধুমাত্র ADB ইনস্টলেশন সমর্থনের জন্য তৈরি।
  • অ্যান্ড্রয়েড ১২ প্লে গেমসের স্ট্রিমিং ইনস্টলেশনের জন্য IncFS ড্রাইভার ব্যবহার করে, যার জন্য উন্নত ব্যবহারকারী অভিজ্ঞতার জন্য IncFS v2-এর নতুন ফিচার ও অপটিমাইজেশন প্রয়োজন।
  • V1 গেম স্ট্রিমিং সমর্থন করে, কিন্তু এর ফলে v2-এর তুলনায় পারফরম্যান্স কমে যায় এবং ব্যাটারি, সিপিইউ ও র‍্যাম বেশি ব্যবহৃত হয়।
  • V2 স্ট্রিমিংয়ের জন্য উন্নত ইউএক্স প্রদান করে, যার মধ্যে রয়েছে মসৃণ অগ্রগতি অ্যানিমেশন, ডিস্ক-স্পেস ব্যবহারের নির্ভুল প্রতিবেদন এবং থার্ড-পার্টি অ্যাপের স্ট্রিমিংয়ে হস্তক্ষেপ প্রতিরোধ।

আপনার কার্নেলে IncFS ড্রাইভার আপগ্রেড করতে, কার্নেল ৪.১৪ অথবা কার্নেল ৪.১৯-এর জন্য নিম্নলিখিত প্যাচগুলি প্রয়োগ করুন:

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

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

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

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

রেফারেন্স বাস্তবায়ন

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

লোডযোগ্য মডিউল (পিক্সেল ৪ ডিভাইস) অ্যান্ড্রয়েড এমুলেটর (কার্নেল ইমেজের একটি অংশ হিসেবে)

যাচাইকরণ এবং পরীক্ষা

ফিচার ইউনিট টেস্ট, CTS এবং GTS ব্যবহার করে বাস্তবায়নটি যাচাই করুন।

সিটিএস

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

জিটিএস

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

অ্যান্ড্রয়েড এসডিকে (এডিবি এবং এপিকেসাইনার) দিয়ে IncFS পরীক্ষা করুন

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

এই পরীক্ষাগুলো খুঁজুন