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

ماژول کرنل سیستم فایل افزایشی (IncFS) که در اندروید ۱۱ معرفی شد، سیستم عامل اندروید را قادر می‌سازد تا APK های استریم شده را از طریق Android Debug Bridge (ADB) دریافت کند.

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

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

پیاده‌سازی

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

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

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

درایور هسته بخشی از یک سیستم بزرگتر برای فعال کردن نصب‌های APK استریم شده است. تولیدکنندگان اصلی تجهیزات (OEM) و فروشندگان نیازی به استفاده از کد دقیق IncFS ارائه شده در پیاده‌سازی‌های نمونه ندارند. با این حال، برای اطمینان از یک تجربه سازگار در بین دستگاه‌ها، باید مطمئن شوید که پیاده‌سازی API دارای یک سیستم فایل است که قابلیت خواندن فایل و قابلیت خواندن و نوشتن دایرکتوری را دارد، همانطور که در رابط کاربری برای مستندات Incremental FS تعریف شده است.

علاوه بر این، پیاده‌سازی‌ها باید دارای گزینه‌های mount و فایل‌های ویژه‌ای باشند که از نظر عملکردی با پیاده‌سازی نمونه 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 یا فقط برای اندروید ۱۱ ، CONFIG_INCREMENTAL_FS=m را در انتهای فایل defconfig اضافه کنید. برای دیدن مثال، روی یکی از لینک‌های زیر کلیک کنید:
  5. ساخت هسته
  6. هسته را در فایل ایمیج دستگاه اندروید جاسازی کنید.
  7. برای دستگاه اندروید هدف خود، یکی از خطوط مشخصه سیستم زیر را که مختص سازنده است به فایل device.mk خود اضافه کنید ( در دستگاه‌هایی که با اندروید ۱۲ و بالاتر راه‌اندازی شده‌اند، اختیاری است ):
  8. وقتی از CONFIG_INCREMENTAL_FS=y استفاده می‌کنید، یکی از موارد زیر را به فایل اضافه کنید:

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

    وقتی از CONFIG_INCREMENTAL_FS=m استفاده می‌کنید ( فقط برای اندروید ۱۱ )، فایل را با یکی از این موارد ضمیمه کنید:

    • PRODUCT_PROPERTY_OVERRIDES += \
    • ro.incremental.enable=module:/vendor/lib/modules/incrementalfs.ko
  9. به عنوان مثال، فایل‌های device.mk را برای شبیه‌ساز اندروید و Pixel 4 ببینید.
  10. فقط برای اندروید ۱۱ : اگر از CONFIG_INCREMENTAL_FS=m استفاده می‌کنید، SE Linux Rules را اضافه کنید.
  11. یک فایل vold.te با محتوای زیر ایجاد و به پوشه device /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 خود اضافه کنید:

ارتقاء درایور هسته

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

  • نسخه‌ای که با اندروید ۱۱ منتشر شد، پیاده‌سازی اولیه IncFS است که فقط برای پشتیبانی از نصب ADB در نظر گرفته شده است.
  • اندروید ۱۲ از درایور IncFS برای استریم نصب بازی‌های Play استفاده می‌کند که برای تجربه کاربری بهتر به ویژگی‌ها و بهینه‌سازی‌های جدید IncFS نسخه ۲ نیاز دارد.
  • نسخه ۱ از استریم بازی پشتیبانی می‌کند، اما این کار را با کاهش عملکرد و استفاده بیشتر از باتری، پردازنده و رم نسبت به نسخه ۲ انجام می‌دهد.
  • نسخه ۲ رابط کاربری بهبود یافته‌ای را برای استریمینگ ارائه می‌دهد، با انیمیشن‌های روان پیشرفت، گزارش دقیق استفاده از فضای دیسک و جلوگیری از تداخل برنامه‌های شخص ثالث در استریمینگ.

برای ارتقاء درایور IncFS در هسته خود، وصله‌های زیر را برای هسته ۴.۱۴ یا هسته ۴.۱۹ اعمال کنید:

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

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

دستگاه‌های جدیدی که از تصویر هسته GKI استفاده می‌کنند، جدیدترین درایور 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 با Android SDK (ADB و apksigner)

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

این آزمایش‌ها را پیدا کنید