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

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

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

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

التنفيذ

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

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

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

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

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

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

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

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

لترقية برنامج تشغيل IncFS في النواة، طبِّق التصحيحات التالية على النواة 4.14 أو النواة 4.19:

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

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

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

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

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

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

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

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

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

CTS

استخدم CtsIncrementalInstallHostTestCases.

GTS

atest GtsIncrementalInstallTestCases:

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

اختبار IncFS

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

اختبار IncFS باستخدام حزمة تطوير البرامج (SDK) لنظام التشغيل Android (أداة تصحيح الأخطاء في Android‏ (ADB) وأداة apksigner)

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

العثور على هذه الاختبارات