تتيح وحدة kernel لنظام الملفات التزايدي (IncFS) المقدمة في Android 11 لنظام التشغيل Android تلقي ملفات APK المتدفقة عبر Android Debug Bridge (ADB).
تعمل وحدة kernel المستقلة هذه على إنشاء نظام ملفات افتراضي جديد يقع أعلى نظام ملفات Android الحالي. يكمل هذا التغييرات في إطار العمل وSDK لتمكين مطوري التطبيقات والألعاب من نشر ملفات APK كبيرة من خلال ADB إلى جهاز يعمل بنظام Android 11 أو أعلى.
يتيح تغيير kernel تنسيق APK Signature Scheme v4 الجديد ويدعم تغييرات إطار عمل Android في Android Package Manager وخدمات النظام الجديدة والتغييرات في ADB.
تطبيق
لتنفيذ IncFS، يجب على مصنعي المعدات الأصلية ومصنعي SoC إضافة برنامج تشغيل kernel جديد إلى أجهزة Android الخاصة بهم.
بالنسبة لنظام التشغيل Android 11 فقط ، إذا تم إنشاء برنامج تشغيل kernel كوحدة نمطية، فسيتم تحميله عند الطلب. إذا لم تكن هناك أي تطبيقات مثبتة من خلال التثبيت التزايدي لـ ADB، فلن يقوم الجهاز بتحميل برنامج تشغيل kernel.
بخلاف ذلك، عندما يتم إنشاؤه كجزء من صورة kernel، يتم دائمًا تحميل برنامج التشغيل. هذا التطبيق صالح لنظام Android 12 والإصدارات الأحدث، ويمكن استخدامه مع Android 11 . للحصول على معلومات حول ترقية برنامج تشغيل kernel إلى Android 12، راجع ترقية برنامج تشغيل Kernel .
يعد برنامج تشغيل kernel جزءًا من نظام أكبر لتمكين عمليات تثبيت APK المتدفقة. لا يحتاج مصنعو المعدات الأصلية والبائعين إلى استخدام رمز IncFS الدقيق المتوفر في تطبيقات العينة. ومع ذلك، لضمان تجربة متسقة عبر الأجهزة، يجب عليك التأكد من أن تطبيق واجهة برمجة التطبيقات (API) يحتوي على نظام ملفات يحتوي على وظيفة قراءة الملفات ووظيفة قراءة وكتابة الدليل كما هو محدد في واجهة Userspace لوثائق Incremental FS .
بالإضافة إلى ذلك، يجب أن تحتوي التطبيقات على خيارات تحميل وملفات خاصة تتطابق وظيفيًا مع نموذج تطبيق 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
أو لنظام 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
الخاص بك:
ترقية برنامج تشغيل Kernel
قد تتضمن الأجهزة التي تقوم بالترقية إلى Android 12 إصدارًا أقدم من برنامج تشغيل IncFS. بالنسبة لهذه الأجهزة، توصي AOSP بتحديث برنامج تشغيل IncFS إلى الإصدار الحالي (في هذه الحالة الإصدار 2) للأسباب التالية:
- الإصدار الذي تم إصداره مع Android 11 هو التنفيذ الأولي لـ IncFS، والذي يستهدف فقط دعم تثبيت ADB.
- يستخدم Android 12 برنامج تشغيل IncFS لبث عمليات تثبيت ألعاب Play، الأمر الذي يتطلب الميزات والتحسينات الجديدة لـ IncFS v2 للحصول على تجربة مستخدم أفضل.
- يدعم الإصدار 1 بث الألعاب، ولكنه يفعل ذلك مع عقوبات على الأداء واستخدام أعلى للبطارية ووحدة المعالجة المركزية وذاكرة الوصول العشوائي مقارنة بالإصدار 2.
- يوفر الإصدار 2 تجربة مستخدم محسنة للبث، مع رسوم متحركة سلسة للتقدم، وتقارير دقيقة عن استخدام مساحة القرص، ومنع تداخل بث تطبيقات الطرف الثالث.
لترقية برنامج تشغيل IncFS في النواة لديك، قم بتطبيق التصحيحات التالية إما على kernel 4.14 أو kernel 4.19:
- تصحيح النواة 4.14
- تصحيح النواة 4.19
بالنسبة لجميع إصدارات kernel المخصصة الأخرى، يرجى نقل إحدى مجموعات التصحيح. إنها تؤثر فقط على دليل fs/incfs
وتنطبق بشكل نظيف على كود v1 الموجود.
- إصلاح Kernel 4.14 لبرنامج التشغيل v1
- إصلاح Kernel 4.19 إلى برنامج التشغيل v1
- إصلاح Kernel 5.4 لبرنامج التشغيل v1
استمر في استخدام برنامج تشغيل IncFS بنفس الطريقة المتبعة مع نظام Android 11 الأصلي ولكن تمت ترقيته الآن، إما كجزء مدمج من صورة kernel، أو كوحدة منفصلة. لا تقم بتغيير لوحة النظام أو تكوين خصائص النظام.
تحصل الأجهزة الجديدة التي تستخدم صورة kernel GKI على أحدث برنامج تشغيل IncFS (الإصدار 2) تلقائيًا، والذي تم تكوينه كجزء من صورة kernel. وهذا لا يتطلب خطوات إضافية.
تم إهمال تكوين الوحدة القابلة للتحميل في Android 12، وهي غير مدعومة للأجهزة الجديدة. يُسمح به فقط للترقيات، أو لتجميد صورة البائع عندما تكون النواة الأصلية قد تم بناؤها بالفعل كوحدة نمطية.
التطبيقات المرجعية
يمكن اعتبار هذا التنفيذ إما جزءًا من صورة kernel، أو ( لنظام Android 11 فقط ) كوحدة نمطية قابلة للتحميل.
وحدة قابلة للتحميل (جهاز Pixel 4)- إضافة الإنشاءات المسبقة لوحدة Kernel
- إضافة وتمكين تغيير خاصية نظام وحدة Kernel على الجهاز
- قم بتحديث قواعد SE Linux
التحقق من الصحة والاختبار
التحقق من صحة التنفيذ باستخدام اختبارات وحدة الميزات، وCTS، وGTS.
CTS
استخدمCtsIncrementalInstallHostTestCases
.جي تي اس
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 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