نظام الملفات التزايدي (IncFS) هو وحدة kernel تمكن نظام التشغيل Android من تلقي ملفات APK المتدفقة عبر Android Debug Bridge (ADB). تنشئ وحدة kernel المستقلة نظام ملفات افتراضيًا جديدًا يجلس فوق نظام ملفات Android الحالي ويكمل التغييرات في إطار عمل Android 11 و SDK لتمكين مطوري التطبيقات والألعاب من نشر ملفات APK كبيرة من خلال ADB على جهاز Android 11.
يمكّن تغيير kernel تنسيق APK Signature Scheme v4 الجديد ، ويدعم تغييرات إطار عمل Android في Android Package Manager ، وخدمات النظام الجديدة ، والتغييرات على Android Debug Bridge.
التنفيذ
يحتاج مصنعي OEM و SoC إلى إضافة برنامج تشغيل kernel جديد إلى أجهزة Android الخاصة بهم. إذا تم إنشاء برنامج تشغيل kernel كوحدة نمطية ، فسيتم تحميله عند الطلب. إذا لم يتم تثبيت أي تطبيق من خلال تثبيت ADB المتزايد ، فلن يقوم الجهاز بتحميل برنامج تشغيل kernel. عند البناء كجزء من صورة kernel ، يتم دائمًا تحميل برنامج التشغيل.
يعد برنامج تشغيل kernel جزءًا من نظام أكبر لتمكين عمليات تثبيت APK المتدفقة. لا يحتاج الشركاء إلى استخدام رمز IncFS المحدد في تطبيقات العينة. ومع ذلك ، لضمان تجربة متسقة عبر الأجهزة ، يجب على الشركاء التأكد من أن تنفيذ واجهة برمجة التطبيقات يحتوي على نظام ملفات يحتوي على وظيفة قراءة الملفات ووظيفة قراءة / كتابة الدليل على النحو المحدد هنا .
بالإضافة إلى ذلك ، يجب أن تحتوي تطبيقات الشركاء على خيارات تحميل وملفات خاصة تتوافق وظيفيًا مع تنفيذ نموذج IncFS.
فيما يلي وصف للتغييرات اللازمة للتنفيذ:
- إعداد آلة التطوير لبناء النواة.
- استهدف النواة
common-android-mainline
فرع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
أوCONFIG_INCREMENTAL_FS=m
سطر بأسفل ملفdefconfig
. يمكن العثور على أمثلة على الروابط التالية: - بناء النواة
- قم بتضمين kernel في بنية صورة جهاز Android .
- بالنسبة لجهاز Android المستهدف ، قم بإلحاق أحد سطور خصائص النظام الخاصة
device.mk
بملفdevice.mk
الخاص بك:- في حالة استخدام
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
- هناك أمثلة لملفات device.mk لمحاكي Android وPixel 4 .
- في حالة استخدام
- فقط في حالة استخدام
CONFIG_INCREMENTAL_FS=m
، أضف قواعد SE Linux .- قم
vold.te
ملفvold.te
إلى مجلد جهازك/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;
-
- قم
file.te
قواعد SE Linux التالية بملفfile.te
الموجود في مجلد/system/sepolicy/vendor
:- مثال لملف
file.te
- برنامج تشغيل نظام الملفات التزايدي
-
type vendor_incremental_module, vendor_file_type, file_type;
- مثال لملف
- قم
file_contents
قواعد SE Linux التالية بملفfile_contents
الموجود في مجلد/system/sepolicy/vendor
:- مثال لملف
file_contents
-
# Incremental file system driver
- مثال لملف
- قم
-
/vendor/lib/modules/incrementalfs\.ko
-
u:object_r:vendor_incremental_module:s0
تطبيقات مرجعية
هناك طريقتان للتعامل مع هذا التنفيذ ، إما كوحدة قابلة للتحميل أو كجزء من صورة kernel.
- وحدة قابلة للتحميل (جهاز Pixel 4)
- إضافة عمليات التجهيز المسبق لوحدة Kernel
- قم بإضافة وتمكين تغيير خصائص نظام وحدة Kernel على الجهاز
- تحديث قواعد SE Linux
- محاكي Android (كجزء من صورة kernel)
- تفعيل برنامج تشغيل IncFS kernel
- تمكين تزايدي على الجهاز
التحقق من الصحة والاختبار
تحقق من صحة التنفيذ باستخدام اختبارات وحدة الميزات و CTS و GTS.
CTS
-
CtsIncrementalInstallHostTestCases
GTS
-
atest GtsIncrementalInstallTestCases
-
/gts-tests/tests/packageinstaller/incremental/src/com/google/android/packageinstaller/incremental/gts/IncrementalInstallerTest.java
-
اختبار IncFs (نظام FIle تزايدي)
- قم بإعداد بيئة التطوير.
- إكمال مهام التنفيذ الموضحة في قسم التنفيذ.
- قم بإجراء الاختبارات اليدوية التالية:
-
$ 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/frameworks/base/services/incremental/test/IncrementalServiceTest.cpp
- /android/cts/tests/tests/content/src/android/content/pm/cts/PackageManagerShellCommandIncrementalTest.java