واحد هسته «سیستم فایل افزایشی» (IncFS) که در Android 11 معرفی شده است سیستمعامل Android را قادر میسازد تا فایلهای APK جاریسازیشده را ازطریق «پل اشکالزدایی Android» (ADB) دریافت کند.
این واحد هسته خوداتکا سیستم فایل مجازی جدیدی ایجاد میکند که در بالای سیستم فایل Android موجود قرار میگیرد. این امر مکمل تغییرات در چارچوب و کیت توسعه نرمافزار است تا توسعهدهندگان برنامه و بازی بتوانند فایلهای APK بزرگ را ازطریق ADB در دستگاهی که Android 11 یا بالاتر را اجرا میکند مستقر کنند.
تغییر هسته امکان استفاده از قالب جدید «طرح امضای APK نسخه ۴» را فراهم میکند و از تغییرات چارچوب Android در «مدیر بسته Android»، خدمات سیستم جدید، و تغییرات ADB پشتیبانی میکند.
پیادهسازی
برای پیادهسازی IncFS، تولیدکنندگان تجهیزات اصلی و سازندگان SoC باید یک درایور هسته جدید به ساختهای دستگاه Android خود اضافه کنند.
فقط برای Android 11، اگر درایور هسته بهعنوان ماژول ساخته شده باشد، درصورت درخواست بار میشود. اگر هیچ برنامهای ازطریق نصب افزایشی ADB نصب نشده باشد، دستگاه درایور هسته را بار نمیکند.
درغیراینصورت، وقتی بهعنوان بخشی از تصویر هسته ساخته میشود، درایور همیشه بار میشود. این پیادهسازی برای Android 12 و بالاتر معتبر است و میتواند با Android 11 استفاده شود. برای اطلاعات درباره ارتقا دادن درایور هسته به Android 12، ارتقا دادن درایور هسته را ببینید.
درایور هسته بخشی از سیستم بزرگتری برای فعال کردن نصبهای APK جاریسازیشده است. تولیدکنندگان تجهیزات اصلی و فروشندگان نیازی به استفاده از کد دقیق IncFS ارائهشده در پیادهسازیهای نمونه ندارند. بااینحال، برای اطمینان از تجربه یکسان در همه دستگاهها، باید مطمئن شوید که پیادهسازی میانای برنامهسازی کاربردی دارای سیستم فایلی است که عملکرد خواندن فایل و عملکرد خواندن-نوشتن دایرکتوری را طبق تعریف در سند میانای Userspace برای Incremental FS دارد.
علاوهبراین، پیادهسازیها باید گزینههای نصب و فایلهای ویژه داشته باشند که ازنظر عملکردی با پیادهسازی نمونه 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یا برای فقط Android 11،CONFIG_INCREMENTAL_FS=mرا در پایین فایلdefconfigاضافه کنید. برای دیدن مثال، روی یکی از پیوندهای زیر کلیک کنید: - ساختن هسته
- هسته را در ساخت تصویر دستگاه Android جاسازی کنید.
- برای دستگاه Android هدف، یکی از خطوط دارایی سیستم مختص فروشنده زیر را به فایل
device.mkخود اضافه کنید (در دستگاههایی که با Android 12 و نسخههای بالاتر عرضه میشوند اختیاری است): PRODUCT_PROPERTY_OVERRIDES += \ro.incremental.enable=yesPRODUCT_PROPERTY_OVERRIDES += \ro.incremental.enable=module:/vendor/lib/modules/incrementalfs.ko- فایلهای نمونه
device.mkرا برای شبیهساز Android و Pixel 4 ببینید. - فقط برای Android 11: اگر از
CONFIG_INCREMENTAL_FS=mاستفاده میکنید، قوانین SE Linux را اضافه کنید. vold.teallow 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\.kou:object_r:vendor_incremental_module:s0
وقتی از CONFIG_INCREMENTAL_FS=y استفاده میکنید، فایل را با یکی از این موارد
پیوست کنید:
وقتی از CONFIG_INCREMENTAL_FS=m (فقط برای Android 11) استفاده میکنید،
یکی از این موارد را به فایل اضافه کنید:
فایل vold.te را با محتوای زیر در پوشه
/system/sepolicy/vendor دستگاهتان ایجاد و اضافه کنید:
به آن اجازه دهید درایور سیستم فایل افزایشی را بار کند:
قوانین SE Linux زیر را به فایل file.te موجود
که در پوشه /system/sepolicy/vendor شما قرار دارد اضافه کنید:
قوانین زیر SE Linux را به فایل file_contents
موجود در پوشه /system/sepolicy/vendor اضافه کنید:
ارتقای درایور هسته
دستگاههایی که به Android 12 ارتقا مییابند ممکن است نسخه قدیمیتری از درایور IncFS داشته باشند. برای این دستگاهها، AOSP توصیه میکند که درایور IncFS را به نسخه فعلی (در این مورد v2) بهروزرسانی کنید، زیرا:
- نسخه منتشرشده با Android 11 پیادهسازی اولیه IncFS است که فقط برای پشتیبانی از نصب ADB هدفیابی شده است.
- Android 12 از درایور IncFS برای جاریسازی نصب بازیهای Play استفاده میکند، که برای تجربه کاربری بهتر به ویژگیهای جدید و بهینهسازیهای IncFS v2 نیاز دارد.
- V1 از جاریسازی بازی پشتیبانی میکند، اما این کار را با افت عملکرد و مصرف بیشتر باتری، CPU، و RAM نسبت به v2 انجام میدهد.
- نسخه ۲ تجربه کاربری بهتری برای جاریسازی ارائه میدهد، با پویانماییهای پیشرفت روان، گزارش دقیق استفاده از فضای دیسک، و جلوگیری از تداخل جاریسازی برنامههای طرف سوم.
برای ارتقا دادن درایور IncFS در هسته، وصلههای زیر را برای هسته ۴.۱۴ یا هسته ۴.۱۹ اعمال کنید:
- وصله Kernel 4.14
- وصله Kernel 4.19
برای همه نسخههای سفارشی دیگر هسته، لطفاً یکی از مجموعههای وصله را انتقال دهید. این تغییرات فقط بر دایرکتوری fs/incfs تأثیر میگذارند و بهطور کامل بر کد v1 موجود اعمال میشوند.
بههمان روشی که برای نسخه اصلی استفاده میکردید، به استفاده از درایور IncFS ادامه دهید، اما اکنون در Android 11 ارتقا یافته است، یا بهعنوان بخشی داخلی از تصویر هسته، یا بهعنوان یک واحد جداگانه. پیکربندی صفحه سیستم یا ویژگی سیستم را تغییر ندهید.
دستگاههای جدیدی که از تصویر هسته GKI استفاده میکنند بهطور خودکار جدیدترین درایور IncFS (نسخه ۲) را دریافت میکنند که بهعنوان بخشی از تصویر هسته پیکربندی شده است. این کار نیاز به مراحل اضافی ندارد.
پیکربندی واحد بارشدنی در Android 12 منسوخ شد و برای دستگاههای جدید پشتیبانی نمیشود. این ویژگی فقط برای ارتقاها یا برای ثابت کردن تصویر فروشنده مجاز است وقتی هسته اصلی ازقبل آن را بهعنوان واحد داخلی داشته باشد.
پیادهسازیهای مرجع
این پیادهسازی را میتوان بهعنوان بخشی از تصویر هسته یا (فقط برای Android 11) بهعنوان یک ماژول قابلبارگیری درنظر گرفت.
واحد بارکردنی (دستگاه Pixel 4)- افزودن پیشساختهای واحد هسته
- افزودن و فعال کردن تغییر ویژگی سیستم واحد هسته در دستگاه
- بهروزرسانی قوانین SE Linux
اعتبارسنجی و آزمایش
پیادهسازی را بااستفاده از «آزمونهای واحد ویژگی»، CTS، و GTS اعتبارسنجی کنید.
CTS
از
CtsIncrementalInstallHostTestCases استفاده کنید.
GTS
atest GtsIncrementalInstallTestCases:
/gts-tests/tests/packageinstaller/incremental/src/com/google/android/packageinstaller/incremental/gts/IncrementalInstallerTest.javaآزمایش IncFS
- محیط توسعه نرمافزار را راهاندازی کنید.
- تکالیف پیادهسازی را که در بخش پیادهسازی شرح داده شده است تکمیل کنید.
- آزمایشهای دستی زیر را اجرا کنید:
mmma system/incremental_delivery/incfs/tests
atest libincfs-test
atest IncrementalServiceTest
atest PackageManagerShellCommandTest
PackageManagerShellCommandIncrementalTest
آزمایش IncFS با «کیت توسعه نرمافزار Android» (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