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

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

تنشئ وحدة النواة المستقلة هذه نظام ملفات افتراضيًا جديدًا يقع فوق نظام ملفات Android الحالي. ويكمّل هذا التغيير التغييرات التي أُجريت على إطار العمل وحزمة تطوير البرامج (SDK) من أجل تمكين مطوّري التطبيقات والألعاب من نشر حِزم APK كبيرة الحجم من خلال أداة تصحيح الأخطاء في Android (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 (ADB).
  • يستخدم نظام التشغيل Android 12 برنامج تشغيل IncFS لتثبيت ألعاب Play من خلال البث، ما يتطلّب الميزات والتحسينات الجديدة في الإصدار 2 من IncFS لتوفير تجربة أفضل للمستخدمين.
  • يتوافق الإصدار 1 مع بث الألعاب، ولكنّه يفرض قيودًا على الأداء ويستهلك قدرًا أكبر من البطارية ووحدة المعالجة المركزية (CPU) وذاكرة الوصول العشوائي (RAM) مقارنةً بالإصدار 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 و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: مثال على التثبيت

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