ماژول کرنل سیستم فایل افزایشی (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 مطابقت داشته باشند.
در ادامه، تغییرات لازم برای اجرا فهرست شدهاند:
- دستگاه توسعه را برای ساخت هسته تنظیم کنید .
- هسته مشترک را از شاخه
common-android-mainlineهدف قرار دهید.repo init -u https://android.googlesource.com/kernel/manifest -b common-android-mainlinerepo sync - تأیید کنید که تغییرات زیر که برای IncFS مورد نیاز هستند، در بخش پرداخت شعبه وجود دارند:
- https://android-review.googlesource.com/c/kernel/common/+/1222869/
- https://android-review.googlesource.com/c/kernel/common/+/1222870
- https://android-review.googlesource.com/c/kernel/common/+/1222871
- https://android-review.googlesource.com/q/%2522ANDROID:+Incremental+fs:%2522+branch:android-mainline+status:merg
- عبارت
CONFIG_INCREMENTAL_FS=yیا فقط برای اندروید ۱۱ ،CONFIG_INCREMENTAL_FS=mرا در انتهای فایلdefconfigاضافه کنید. برای دیدن مثال، روی یکی از لینکهای زیر کلیک کنید: - ساخت هسته
- هسته را در فایل ایمیج دستگاه اندروید جاسازی کنید.
- برای دستگاه اندروید هدف خود، یکی از خطوط مشخصه سیستم زیر را که مختص سازنده است به فایل
device.mkخود اضافه کنید ( در دستگاههایی که با اندروید ۱۲ و بالاتر راهاندازی شدهاند، اختیاری است ): -
PRODUCT_PROPERTY_OVERRIDES += \ -
ro.incremental.enable=yes -
PRODUCT_PROPERTY_OVERRIDES += \ -
ro.incremental.enable=module:/vendor/lib/modules/incrementalfs.ko - به عنوان مثال، فایلهای
device.mkرا برای شبیهساز اندروید و Pixel 4 ببینید. - فقط برای اندروید ۱۱ : اگر از
CONFIG_INCREMENTAL_FS=mاستفاده میکنید، SE Linux Rules را اضافه کنید. -
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; - فایل
file.te- برای مثال به این فایلfile.teمراجعه کنید.) - درایور سیستم فایل افزایشی
-
type vendor_incremental_module, vendor_file_type, file_type; - فایل
file_contents- برای مثال، به این فایلfile_contentsمراجعه کنید. -
# Incremental file system driver -
/vendor/lib/modules/incrementalfs\.ko -
u:object_r:vendor_incremental_module:s0
وقتی از CONFIG_INCREMENTAL_FS=y استفاده میکنید، یکی از موارد زیر را به فایل اضافه کنید:
وقتی از CONFIG_INCREMENTAL_FS=m استفاده میکنید ( فقط برای اندروید ۱۱ )، فایل را با یکی از این موارد ضمیمه کنید:
یک فایل vold.te با محتوای زیر ایجاد و به پوشه device /system/sepolicy/vendor خود اضافه کنید:
به آن اجازه دهید درایور سیستم فایل افزایشی را بارگیری کند:
قوانین SE Linux زیر را به فایل file.te موجود در پوشه /system/sepolicy/vendor خود اضافه کنید:
قوانین SE Linux زیر را به فایل file_contents موجود در پوشه /system/sepolicy/vendor خود اضافه کنید:
ارتقاء درایور هسته
دستگاههایی که به اندروید ۱۲ ارتقا مییابند ممکن است شامل نسخه قدیمیتری از درایور IncFS باشند. برای این دستگاهها، AOSP به دلایل زیر توصیه میکند که درایور IncFS را به نسخه فعلی (در این مورد v2) بهروزرسانی کنید:
- نسخهای که با اندروید ۱۱ منتشر شد، پیادهسازی اولیه IncFS است که فقط برای پشتیبانی از نصب ADB در نظر گرفته شده است.
- اندروید ۱۲ از درایور IncFS برای استریم نصب بازیهای Play استفاده میکند که برای تجربه کاربری بهتر به ویژگیها و بهینهسازیهای جدید IncFS نسخه ۲ نیاز دارد.
- نسخه ۱ از استریم بازی پشتیبانی میکند، اما این کار را با کاهش عملکرد و استفاده بیشتر از باتری، پردازنده و رم نسبت به نسخه ۲ انجام میدهد.
- نسخه ۲ رابط کاربری بهبود یافتهای را برای استریمینگ ارائه میدهد، با انیمیشنهای روان پیشرفت، گزارش دقیق استفاده از فضای دیسک و جلوگیری از تداخل برنامههای شخص ثالث در استریمینگ.
برای ارتقاء درایور IncFS در هسته خود، وصلههای زیر را برای هسته ۴.۱۴ یا هسته ۴.۱۹ اعمال کنید:
برای سایر نسخههای کرنل سفارشی، لطفاً یکی از پچستها را پورت کنید. آنها فقط روی دایرکتوری fs/incfs تأثیر میگذارند و به طور کامل روی کد نسخه ۱ موجود اعمال میشوند.
- رفع مشکل درایور نسخه ۱ برای کرنل ۴.۱۴
- رفع مشکل درایور نسخه ۱ برای کرنل ۴.۱۹
- رفع مشکل درایور نسخه ۱ برای کرنل ۵.۴
به استفاده از درایور IncFS به همان روشی که برای اندروید ۱۱ اصلی اما اکنون ارتقا یافته استفاده میکردید، چه به عنوان بخشی داخلی از تصویر هسته و چه به عنوان یک ماژول جداگانه، ادامه دهید. برد سیستم یا پیکربندی ویژگیهای سیستم را تغییر ندهید.
دستگاههای جدیدی که از تصویر هسته GKI استفاده میکنند، جدیدترین درایور IncFS (نسخه ۲) را که به عنوان بخشی از تصویر هسته پیکربندی شده است، به طور خودکار دریافت میکنند. این کار به مراحل اضافی نیاز ندارد.
پیکربندی ماژول قابل بارگذاری در اندروید ۱۲ منسوخ شده است و برای دستگاههای جدید پشتیبانی نمیشود. این پیکربندی فقط برای ارتقاها یا برای فریز کردن تصویر فروشنده در زمانی که هسته اصلی از قبل آن را به عنوان یک ماژول ساخته است، مجاز است.
پیادهسازیهای مرجع
این پیادهسازی میتواند به عنوان بخشی از یک تصویر هسته یا ( فقط برای اندروید ۱۱ ) به عنوان یک ماژول قابل بارگذاری در نظر گرفته شود.
ماژول قابل بارگیری (دستگاه پیکسل ۴)- ماژولهای پیشساخته هسته را اضافه کنید
- افزودن و فعال کردن تغییر ویژگی سیستم ماژول هسته در دستگاه
- بهروزرسانی قوانین لینوکس SE
اعتبارسنجی و آزمایش
پیادهسازی را با استفاده از تستهای واحد ویژگی، CTS و GTS اعتبارسنجی کنید.
سی تی اس
ازCtsIncrementalInstallHostTestCases استفاده کنید.جی تی اس
atest GtsIncrementalInstallTestCases :
/gts-tests/tests/packageinstaller/incremental/src/com/google/android/packageinstaller/incremental/gts/IncrementalInstallerTest.javaIncFS را آزمایش کنید
- یک محیط توسعه راهاندازی کنید .
- وظایف اجرایی ذکر شده در بخش اجرا را تکمیل کنید.
- تستهای دستی زیر را اجرا کنید:
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

این آزمایشها را پیدا کنید
- /android/kernel/common/tools/testing/selftests/filesystems/incfs/
- /android/system/incremental_delivery/incfs/tests/incfs_test.cpp
- /android/cts/tests/tests/content/src/android/content/pm/cts/PackageManagerShellCommandIncrementalTest.java