سیستم فایل افزایشی

ماژول هسته سیستم فایل افزایشی (IncFS) که در اندروید 11 معرفی شده است، سیستم عامل اندروید را قادر می سازد تا فایل های APK پخش شده را از طریق پل اشکال زدایی اندروید (ADB) دریافت کند.

این ماژول هسته مستقل یک سیستم فایل مجازی جدید ایجاد می کند که در بالای سیستم فایل اندروید موجود قرار می گیرد. این تغییرات در چارچوب و SDK را تکمیل می‌کند تا به توسعه‌دهندگان برنامه‌ها و بازی‌ها امکان می‌دهد فایل‌های APK بزرگ را از طریق ADB در دستگاهی که روی Android 11 یا بالاتر اجرا می‌کند، مستقر کنند.

تغییر هسته یک فرمت جدید APK Signature Scheme v4 را فعال می‌کند و از تغییرات چارچوب Android در مدیریت بسته Android، خدمات سیستم جدید و تغییرات در ADB پشتیبانی می‌کند.

پیاده سازی

برای پیاده سازی IncFS، سازندگان OEM و SoC باید یک درایور هسته جدید را به بیلدهای دستگاه اندرویدی خود اضافه کنند.

فقط برای اندروید 11 ، اگر درایور هسته به‌عنوان یک ماژول ساخته شده باشد، بنا به درخواست بارگیری می‌شود. اگر هیچ برنامه‌ای از طریق نصب تدریجی ADB نصب نشده باشد، دستگاه درایور هسته را بارگیری نمی‌کند.

در غیر این صورت، هنگامی که به عنوان بخشی از تصویر هسته ساخته می شود، درایور همیشه بارگذاری می شود. این پیاده سازی برای اندروید 12 و بالاتر معتبر است و با اندروید 11 قابل استفاده است . برای اطلاعات در مورد ارتقاء درایور هسته به اندروید 12، به ارتقاء درایور کرنل مراجعه کنید.

درایور هسته بخشی از یک سیستم بزرگتر برای فعال کردن نصب های جریانی APK است. OEM ها و فروشندگان نیازی به استفاده از کد IncFS دقیق ارائه شده در اجرای نمونه ندارند. با این حال، برای اطمینان از یک تجربه ثابت در بین دستگاه‌ها، باید اطمینان حاصل کنید که پیاده‌سازی API دارای یک سیستم فایل است که دارای عملکرد خواندن فایل و عملکرد خواندن و نوشتن دایرکتوری است، همانطور که در رابط کاربری فضای کاربر برای مستندات Incremental 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. CONFIG_INCREMENTAL_FS=y یا فقط برای Android 11 ، CONFIG_INCREMENTAL_FS=m در پایین فایل defconfig اضافه کنید. برای مشاهده نمونه، روی یکی از لینک های زیر کلیک کنید:
  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. نمونه فایل های device.mk را برای شبیه ساز اندروید و پیکسل 4 ببینید.
  10. فقط برای Android 11 : اگر CONFIG_INCREMENTAL_FS=m استفاده می‌کنید، قوانین SE Linux را اضافه کنید.
  11. یک فایل vold.te به پوشه /system/sepolicy/vendor دستگاه خود با محتوای زیر ایجاد و اضافه کنید:

    • 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;

    قوانین SE Linux زیر را به فایل file.te موجود در پوشه /system/sepolicy/vendor خود اضافه کنید:

    • فایل file.te - برای مثال این فایل file.te را ببینید.)
    • درایور سیستم فایل افزایشی
    • type vendor_incremental_module, vendor_file_type, file_type;

    قوانین SE Linux زیر را به فایل file_contents موجود در پوشه /system/sepolicy/vendor خود اضافه کنید:

    • فایل file_contents - برای مثال، این فایل file_contents را ببینید.
    • # Incremental file system driver
    • /vendor/lib/modules/incrementalfs\.ko
    • u:object_r:vendor_incremental_module:s0

ارتقا درایور کرنل

دستگاه هایی که به اندروید 12 ارتقا می یابند ممکن است شامل نسخه قدیمی تر درایور IncFS باشند. برای آن دستگاه‌ها، AOSP توصیه می‌کند به دلایل زیر درایور IncFS را به نسخه فعلی (در این مورد v2) به‌روزرسانی کنید:

  • نسخه منتشر شده با اندروید 11 اجرای اولیه IncFS است که فقط برای پشتیبانی نصب ADB هدف قرار گرفته است.
  • اندروید 12 از درایور IncFS برای نصب استریم بازی های Play استفاده می کند که برای تجربه کاربری بهتر به ویژگی ها و بهینه سازی های جدید IncFS v2 نیاز دارد.
  • V1 از پخش بازی پشتیبانی می کند، اما این کار را با جریمه های عملکرد و مصرف باتری، CPU و RAM بالاتر نسبت به نسخه 2 انجام می دهد.
  • V2 UX بهبود یافته ای را برای استریم، با انیمیشن های پیشرفت روان، گزارش دقیق استفاده از فضای دیسک، و جلوگیری از تداخل پخش جریانی برنامه های شخص ثالث ارائه می دهد.

برای ارتقاء درایور IncFS در هسته خود، وصله های زیر را برای کرنل 4.14 یا کرنل 4.19 اعمال کنید:

برای همه نسخه‌های کرنل سفارشی دیگر، لطفاً یکی از پچ‌ست‌ها را پورت کنید. آنها فقط دایرکتوری fs/incfs را تحت تأثیر قرار می دهند و به طور تمیز روی کد v1 موجود اعمال می شوند.

به استفاده از درایور IncFS به همان روشی که برای اندروید 11 اصلی اما اکنون ارتقا یافته است، یا به عنوان بخشی داخلی از تصویر هسته یا به عنوان یک ماژول جداگانه ادامه دهید. برد سیستم یا پیکربندی ویژگی سیستم را تغییر ندهید.

دستگاه‌های جدیدی که از یک تصویر هسته GKI استفاده می‌کنند، آخرین درایور (v2) IncFS را به‌طور خودکار دریافت می‌کنند، که به عنوان بخشی از تصویر هسته پیکربندی شده است. این به مراحل اضافی نیاز ندارد.

پیکربندی ماژول قابل بارگیری در Android 12 منسوخ شده است و برای دستگاه‌های جدید پشتیبانی نمی‌شود. این فقط برای ارتقاءها یا برای فریز کردن تصویر فروشنده زمانی مجاز است که هسته اصلی قبلاً آن را به عنوان یک ماژول ساخته بود.

پیاده سازی های مرجع

این پیاده سازی می تواند به عنوان بخشی از یک تصویر هسته یا ( فقط برای اندروید 11 ) به عنوان یک ماژول قابل بارگیری در نظر گرفته شود.

ماژول قابل بارگیری (دستگاه Pixel 4) شبیه ساز اندروید (به عنوان بخشی از تصویر هسته)

اعتبار سنجی و آزمایش

اعتبار پیاده سازی را با استفاده از تست های واحد ویژگی، CTS و GTS انجام دهید.

سی تی اس

از 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

نحوه تست IncFS با Android SDK (ADB و apksigner)

  • یک محیط توسعه راه اندازی کنید .
  • وظایف اجرایی که در بخش پیاده سازی مشخص شده است را کامل کنید.
  • بیلد را روی یک دستگاه فیزیکی یا شبیه ساز هدف فلش کنید.
  • یک APK موجود ایجاد یا دریافت کنید.
  • یک کلید امضای اشکال زدایی ایجاد کنید.
  • APK را با فرمت امضای v4 از پوشه build-tools امضا کنید .
    ./apksigner sign --ks debug.keystore game.apk
  • APK را روی دستگاه از پوشه platform-tools نصب کنید .
    ./adb install game.apk
نمونه نصب
شکل 1 : نمونه نصب

این تست ها را بیابید