نظام الملفات التزايدي

تتيح وحدة نواة نظام الملفات التزايدي (IncFS) التي تم طرحها في Android 11 لنظام التشغيل Android تلقّي حِزم APK التي يتم بثّها عبر Android Debug Bridge (ADB).

تُنشئ وحدة النواة المستقلة هذه نظام ملفات افتراضيًا جديدًا يرتكز على نظام ملفات Android الحالي. ويكمّل ذلك التغييرات في إطار العمل وحزمة SDK لتمكين مطوّري التطبيقات والألعاب من نشر حِزم APK كبيرة من خلال ADB على جهاز يعمل بنظام التشغيل Android 11 أو إصدار أحدث.

يتيح تغيير النواة تنسيقًا جديدًا هو الإصدار 4 من مخطّط توقيع حزمة APK ويدعم تغييرات إطار عمل Android في "مدير حِزم Android" وخدمات النظام الجديدة والتغييرات في ADB.

التنفيذ

لتنفيذ IncFS، يجب على الشركات المصنّعة للمعدات الأصلية ومصنّعي أنظمة SoC إضافة برنامج تشغيل جديد للنواة إلى إصدارات أجهزة Android.

بالنسبة إلى Android 11 فقط، إذا تم إنشاء برنامج تشغيل النواة كوحدة، يتم تحميله عند الطلب. إذا لم يتم تثبيت أي تطبيقات من خلال عملية تثبيت تزايدي عبر ADB، لن يحمّل الجهاز برنامج تشغيل النواة.

بخلاف ذلك، يتم تحميل برنامج التشغيل دائمًا عند إنشائه كجزء من صورة النواة. هذا التنفيذ صالح لنظام التشغيل Android 12 والإصدارات الأحدث، ويمكن استخدامه مع Android 11. للحصول على معلومات حول ترقية برنامج تشغيل النواة إلى Android 12، يُرجى الاطّلاع على ترقية برنامج تشغيل النواة.

يُعدّ برنامج تشغيل النواة جزءًا من نظام أكبر يتيح تثبيت حِزم APK التي يتم بثّها. ليس على الشركات المصنّعة للمعدات الأصلية والمورّدين استخدام رمز IncFS نفسه المقدَّم في عمليات التنفيذ النموذجية. ومع ذلك، لضمان تجربة متّسقة على جميع الأجهزة، يجب التأكّد من أنّ تنفيذ واجهة برمجة التطبيقات يتضمّن نظام ملفات يتضمّن وظيفة قراءة الملفات ووظيفة القراءة والكتابة في الدليل كما هو محدّد في مستند واجهة مساحة المستخدم لنظام الملفات التزايدي.

بالإضافة إلى ذلك، يجب أن تتضمّن عمليات التنفيذ خيارات التحميل والملفات الخاصة التي تتطابق وظيفيًا مع عملية التنفيذ النموذجية لنظام الملفات التزايدي.

في ما يلي قائمة بالتغييرات اللازمة للتنفيذ:

  1. إعداد جهاز التطوير لإنشاء النواة.
  2. استهداف النواة الشائعة من فرع common-android-mainline
    repo init -u https://android.googlesource.com/kernel/manifest -b common-android-mainline
    repo sync
  3. التأكّد من أنّ التغييرات التالية اللازمة لنظام الملفات التزايدي موجودة في الـ فرع الذي تم سحبه:
  4. إلحاق CONFIG_INCREMENTAL_FS=y أو لنظام التشغيل Android 11 فقط، CONFIG_INCREMENTAL_FS=m في أسفل ملف defconfig للاطّلاع على مثال، انقر على أحد الروابط أدناه:
  5. إنشاء النواة
  6. تضمين النواة في عملية إنشاء صورة جهاز Android
  7. بالنسبة إلى جهاز Android المستهدَف، ألحِق أحد أسطر خصائص النظام الخاصة بالمورّد بملف device.mk (اختياري في الأجهزة التي تم طرحها باستخدام Android 12 والإصدارات الأحدث):
  8. عند استخدام CONFIG_INCREMENTAL_FS=y، ألحِق الملف بأحد الخيارَين التاليَين:

    • PRODUCT_PROPERTY_OVERRIDES += \
    • ro.incremental.enable=yes

    عند استخدام CONFIG_INCREMENTAL_FS=m (لنظام التشغيل Android 11 فقط)، ألحِق الملف بأحد الخيارَين التاليَين:

    • PRODUCT_PROPERTY_OVERRIDES += \
    • ro.incremental.enable=module:/vendor/lib/modules/incrementalfs.ko
  9. يمكنك الاطّلاع على ملفات device.mk النموذجية لمحاكي Android و Pixel 4.
  10. لنظام التشغيل Android 11 فقط: إذا كنت تستخدم CONFIG_INCREMENTAL_FS=m، أضِف قواعد SE Linux.
  11. أنشئ ملف 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;

    ألحِق قواعد SE Linux التالية بملف file.te الحالي الموجود في مجلد /system/sepolicy/vendor:

    • ملف file.te - للاطّلاع على مثال، يمكنك الاطّلاع على ملف file.te هذا.)
    • برنامج تشغيل نظام الملفات التزايدي
    • type vendor_incremental_module, vendor_file_type, file_type;

    ألحِق قواعد SE Linux التالية بملف file_contents الحالي الموجود في مجلد /system/sepolicy/vendor:

    • ملف file_contents - للاطّلاع على مثال، يمكنك الاطّلاع على ملف file_contents هذا.
    • # Incremental file system driver
    • /vendor/lib/modules/incrementalfs\.ko
    • u:object_r:vendor_incremental_module:s0

ترقية برنامج تشغيل النواة

قد تتضمّن الأجهزة التي تتم ترقيتها إلى Android 12 إصدارًا أقدم من برنامج تشغيل نظام الملفات التزايدي. بالنسبة إلى هذه الأجهزة، تنصح AOSP بترقية برنامج تشغيل نظام الملفات التزايدي إلى الإصدار الحالي (الإصدار 2 في هذه الحالة) للأسباب التالية:

  • الإصدار الذي تم إصداره مع Android 11 هو عملية التنفيذ الأولية لنظام الملفات التزايدي، وهو مخصّص فقط لدعم التثبيت عبر ADB.
  • يستخدم Android 12 برنامج تشغيل نظام الملفات التزايدي لعمليات التثبيت التي يتم بثّها لألعاب Play، ما يتطلّب الميزات الجديدة والتحسينات في الإصدار 2 من نظام الملفات التزايدي لتحسين تجربة المستخدم.
  • يتيح الإصدار 1 بث الألعاب، ولكن مع انخفاض مستوى الأداء وزيادة استهلاك البطارية ووحدة المعالجة المركزية وذاكرة الوصول العشوائي مقارنةً بالإصدار 2.
  • يوفّر الإصدار 2 تجربة مستخدم محسّنة للبث، مع رسوم متحركة سلسة للتقدّم، تقارير دقيقة عن استخدام مساحة القرص ومنع تداخل بث التطبيقات الخارجية.

لترقية برنامج تشغيل نظام الملفات التزايدي في النواة، طبِّق التصحيحات التالية لـ إما للنواة 4.14 أو النواة 4.19:

بالنسبة إلى جميع إصدارات النواة المخصّصة الأخرى، يُرجى نقل إحدى مجموعات التصحيحات. لا تؤثر هذه التصحيحات إلا في دليل fs/incfs ويتم تطبيقها بشكل سليم على رمز الإصدار 1 الحالي.

واصِل استخدام برنامج تشغيل نظام الملفات التزايدي بالطريقة نفسها كما في Android 11 الأصلي الذي تمت ترقيته الآن ، إما كجزء مضمّن من صورة النواة أو كوحدة منفصلة. لا تغيِّر لوحة النظام أو إعدادات خصائص النظام.

تحصل الأجهزة الجديدة التي تستخدم صورة نواة GKI على أحدث إصدار (الإصدار 2) من برنامج تشغيل نظام الملفات التزايدي تلقائيًا، ويتم إعداده كجزء من صورة النواة. لا يتطلّب ذلك خطوات إضافية.

تم إيقاف إعداد الوحدة القابلة للتحميل نهائيًا في Android 12، ولا يتوافق مع الأجهزة الجديدة. يُسمح به فقط للترقيات أو لتجميد صورة المورّد عندما تكون النواة الأصلية قد تم إنشاؤها كوحدة.

عمليات التنفيذ المرجعية

يمكن اعتبار عملية التنفيذ هذه إما كجزء من صورة النواة أو (for Android 11 only) كوحدة قابلة للتحميل.

الوحدة القابلة للتحميل (جهاز Pixel 4) محاكي Android (كجزء من صورة النواة)

التحقق من صحة الإجراءات واختبارها

تحقَّق من صحة عملية التنفيذ باستخدام اختبارات الوحدات الوظيفية واختبار التوافق (CTS) واختبار التوافق من Google (GTS).

مجموعة أدوات اختبار التوافق (CTS)

استخدِم CtsIncrementalInstallHostTestCases.

اختبار التوافق من Google (GTS)

atest GtsIncrementalInstallTestCases:

/gts-tests/tests/packageinstaller/incremental/src/com/google/android/packageinstaller/incremental/gts/IncrementalInstallerTest.java

اختبار نظام الملفات التزايدي

  1. إعداد بيئة تطوير
  2. إكمال مهام التنفيذ الموضّحة في قسم التنفيذ
  3. إجراء الاختبارات اليدوية التالية:
    mmma system/incremental_delivery/incfs/tests
    atest libincfs-test
    atest IncrementalServiceTest
    atest PackageManagerShellCommandTest
    PackageManagerShellCommandIncrementalTest

اختبار نظام الملفات التزايدي باستخدام حزمة SDK لنظام التشغيل Android (ADB وapksigner)

  • إعداد بيئة تطوير
  • إكمال مهام التنفيذ الموضّحة في قسم التنفيذ
  • تثبيت الإصدار على جهاز فعلي أو محاكي مستهدَف
  • إنشاء حزمة APK أو الحصول على حزمة حالية
  • إنشاء مفتاح توقيع لتصحيح الأخطاء.
  • توقيع حزمة APK باستخدام تنسيق التوقيع v4 من مجلد build-tools
    ./apksigner sign --ks debug.keystore game.apk
  • تثبيت حزمة APK على الجهاز فقط من مجلد platform-tools
    ./adb install game.apk
مثال على التثبيت
الشكل 1: مثال على التثبيت

تحديد موقع هذه الاختبارات