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

تتيح وحدة 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 ، يجب على مصنعي OEM و SoC إضافة برنامج تشغيل kernel جديد إلى أجهزة Android الخاصة بهم.

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

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

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

بالإضافة إلى ذلك ، يجب أن تحتوي التطبيقات على خيارات تحميل وملفات خاصة تتطابق وظيفيًا مع تنفيذ نموذج 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 أو لنظام 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 - للحصول على مثال ، راجع ملف file_contents هذا.
    • # Incremental file system driver
    • /vendor/lib/modules/incrementalfs\.ko
    • u:object_r:vendor_incremental_module:s0

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

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

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

لترقية برنامج تشغيل IncFS في النواة الخاصة بك ، قم بتطبيق التصحيحات التالية إما لـ kernel 4.14 أو kernel 4.19:

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

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

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

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

تطبيقات مرجعية

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

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

التحقق من الصحة والاختبار

تحقق من صحة التنفيذ باستخدام اختبارات وحدة الميزات و 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 باستخدام Android SDK (ADB و Apksigner)

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

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