تتيح وحدة نظام الملفات المتزايد (IncFS) في kernel التي تم طرحها في الإصدار 11 من نظام التشغيل Android تلقّي ملفات APK التي يتم بثها عبر أداة Android Debug Bridge (ADB).
تُنشئ وحدة kernel هذه التي تتضمّن كل العناصر اللازمة نظام ملفات افتراضيًا جديدًا يقع فوق نظام ملفات Android الحالي. ويُعدّ ذلك إضافةً إلى التغييرات في الإطار الأساسي وحزمة تطوير البرامج (SDK) لإتاحة إمكانية نشر حِزم APK كبيرة من خلال ADB على جهاز يعمل بنظام التشغيل Android 11 أو إصدار أحدث.
يتيح تغيير kernel استخدام تنسيق الإصدار 4 من مخطّط توقيع حِزم APK الجديد ويتوافق مع تغييرات إطار عمل Android في "مدير حِزم Android"، وخدمات النظام الجديدة، والتغييرات على ADB.
التنفيذ
لتنفيذ IncFS، على المصنّعين الأصليّين للأجهزة والمصنّعين لشرائح المعالجة المتكاملة إضافة برنامج تشغيل kernel جديد إلى إصدارات أجهزة Android.
لنظام التشغيل Android 11 فقط، إذا تم إنشاء برنامج تشغيل kernel كوحدة، يتم تحميله عند الطلب. إذا لم تكن هناك أي تطبيقات مثبَّتة من خلال عملية تثبيت متزايدة باستخدام أداة ADB، لن يحمِّل الجهاز برنامج تشغيل kernel.
بخلاف ذلك، يتم تحميل برنامج التشغيل دائمًا عند إنشائه كجزء من ملف رمز التمهيد الخاص بالنواة. إنّ عملية التنفيذ هذه صالحة لنظام التشغيل Android 12 والإصدارات الأحدث، ويمكن استخدامها مع Android 11. للحصول على معلومات عن ترقية برنامج تشغيل kernel إلى Android 12، يُرجى الاطّلاع على مقالة ترقية برنامج تشغيل kernel.
يُعدّ برنامج تشغيل kernel جزءًا من نظام أكبر لتفعيل عمليات تثبيت APK المُبثَّقة. لا يحتاج المصنّعون الأصليون للأجهزة والمورّدون إلى استخدام رمز IncFS بالضبط المقدَّم في نماذج عمليات التنفيذ. ومع ذلك، لضمان تجربة متّسقة على جميع الأجهزة، يجب التأكّد من أنّ عملية تنفيذ واجهة برمجة التطبيقات تتضمّن نظام ملفات يتضمّن وظيفة قراءة الملفات وقراءة وكتابة الدليل كما هو موضح في مستندات واجهة Userspace لنظام الملفات المتزايد.
بالإضافة إلى ذلك، يجب أن تتضمّن عمليات التنفيذ خيارات التثبيت والملفات الخاصة التي تتطابق وظيفيًا مع نموذج تنفيذ IncFS.
في ما يلي قائمة بالتغييرات اللازمة لتنفيذ الميزة:
- إعداد جهاز التطوير لإنشاء النواة
- استهدِف النواة المشتركة من فرع
common-android-mainline
.repo init -u https://android.googlesource.com/kernel/manifest -b common-android-mainline
repo 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
أو في أسفل ملفdefconfig
على أجهزة Android 11 فقط، أوCONFIG_INCREMENTAL_FS=m
في أسفل ملفdefconfig
. للاطّلاع على مثال، انقر على أحد الروابط التالية: - إنشاء النواة
- أدخِل النواة في إصدار صورة جهاز Android.
- بالنسبة إلى جهاز Android المستهدَف، يمكنك إلحاق أحد أسطر سمات النظام التالية الخاصة بالمورّد
بملف
device.mk
(اختياري في الأجهزة التي تم تشغيلها باستخدام Android 12 والإصدارات الأحدث): PRODUCT_PROPERTY_OVERRIDES += \
ro.incremental.enable=yes
PRODUCT_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.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
(لنظام التشغيل 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 إلى الإصدار الحالي (في هذه الحالة الإصدار 2) للأسباب التالية:
- الإصدار الذي تم طرحه مع Android 11 هو التنفيذ الأولي لـ IncFS، والذي يستهدف فقط إتاحة تثبيت ADB.
- يستخدم نظام التشغيل Android 12 برنامج تشغيل IncFS لبث عمليات تثبيت ألعاب Play، ما يتطلّب الميزات الجديدة والتحسينات في الإصدار 2 من IncFS لتوفير تجربة أفضل للمستخدم.
- يتيح الإصدار 1 بث الألعاب، ولكن مع انخفاض في الأداء و استهلاك أعلى للبطارية ووحدة المعالجة المركزية وذاكرة الوصول العشوائي مقارنةً بالإصدار 2.
- يوفّر الإصدار 2 تجربة مستخدم محسّنة لبث المحتوى، مع صور متحركة سلسة للتقدّم، وتقارير دقيقة عن استخدام مساحة القرص، ومنع التدخل في بث التطبيقات التابعة لجهات خارجية.
لترقية برنامج تشغيل IncFS في نواة النظام، عليك تطبيق الرقع التالية لإصداري نواة النظام 4.14 أو 4.19:
- تصحيح النواة 4.14
- تصحيح النواة 4.19
بالنسبة إلى جميع إصدارات النواة المخصّصة الأخرى، يُرجى نقل أحد مجموعات الرموز البرمجية. ولا تؤثر هذه التغييرات إلا في دليل fs/incfs
، ويتم تطبيقها بدقة على رمز الإصدار 1 الحالي.
- إصلاح في نواة 4.14 لبرنامج تشغيل الإصدار 1
- إصلاح في نواة 4.19 لإصدار 1 من برنامج التشغيل
- إصلاح في الإصدار 5.4 من نواة Linux لبرنامج تشغيل الإصدار 1
يمكنك مواصلة استخدام برنامج تشغيل IncFS بالطريقة نفسها المستخدَمة في الإصدار الأصلي من نظام التشغيل Android 11 الذي تمت ترقيته الآن، إما كجزء مضمّن من صورة kernel أو كوحدة منفصلة. لا تغيِّر إعدادات لوحة النظام أو ملف تعريف النظام.
تحصل الأجهزة الجديدة التي تستخدم صورة نواة GKI على أحدث إصدار (الإصدار 2) من برنامج تشغيل IncFS تلقائيًا، ويتم ضبطه كجزء من صورة النواة. ولا يتطلّب ذلك سوى اتّباع خطوات إضافية.
تم إيقاف إعدادات الوحدة القابلة للتحميل نهائيًا في Android 12، وهي ليست متاحة للأجهزة الجديدة. لا يُسمح بذلك إلا للترقيات أو لتجميد صورة أحد المورّدين عندما يكون قد تم إنشاء الصورة كوحدة في النواة الأصلية.
عمليات التنفيذ المرجعية
يمكن اعتبار هذا التنفيذ إما كجزء من صورة نواة أو (لنظام التشغيل Android 11 فقط) كوحدة قابلة للتحميل.
وحدة قابلة للتحميل (على جهاز Pixel 4)- إضافة الوحدات المُسبقة الإنشاء لنظام التشغيل
- إضافة وتشغيل ميزة تغيير سمة نظام وحدة النواة على الجهاز
- تعديل قواعد SE Linux
التحقّق والاختبار
التحقّق من التنفيذ باستخدام اختبارات وحدات الميزات ومجموعة أدوات اختبار التوافق ومجموعة أدوات اختبار الأداء
مجموعة أدوات اختبار التوافق (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 باستخدام حزمة تطوير البرامج (SDK) لنظام التشغيل Android (ADB وapksigner)
- إعداد بيئة تطوير
- أكمِل مهام التنفيذ الموضّحة في قسم التنفيذ.
- وضِع الإصدار على جهاز أو محاكي مستهدف
- أنشئ حزمة APK حالية أو احصل عليها.
- أنشئ مفتاح توقيع تصحيح الأخطاء.
- وقِّع حزمة APK باستخدام تنسيق التوقيع بالإصدار 4 من مجلد
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