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

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

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

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

يعد برنامج تشغيل kernel جزءًا من نظام أكبر لتمكين عمليات تثبيت APK المتدفقة. لا يحتاج مصنعو المعدات الأصلية والبائعين إلى استخدام رمز IncFS الدقيق المتوفر في تطبيقات العينة. ومع ذلك، لضمان تجربة متسقة عبر الأجهزة، يجب عليك التأكد من أن تطبيق واجهة برمجة التطبيقات (API) يحتوي على نظام ملفات يحتوي على وظيفة قراءة الملفات ووظيفة قراءة وكتابة الدليل كما هو محدد في واجهة 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_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 للحصول على تجربة مستخدم أفضل.
  • يدعم الإصدار 1 بث الألعاب، ولكنه يفعل ذلك مع عقوبات على الأداء واستخدام أعلى للبطارية ووحدة المعالجة المركزية وذاكرة الوصول العشوائي مقارنة بالإصدار 2.
  • يوفر الإصدار 2 تجربة مستخدم محسنة للبث، مع رسوم متحركة سلسة للتقدم، وتقارير دقيقة عن استخدام مساحة القرص، ومنع تداخل بث تطبيقات الطرف الثالث.

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

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

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

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

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

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

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

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

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

التحقق من صحة التنفيذ باستخدام اختبارات وحدة الميزات، وCTS، وGTS.

CTS

استخدم CtsIncrementalInstallHostTestCases .

جي تي اس

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 : مثال التثبيت

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