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

نظام الملفات التزايدي (IncFS) هو وحدة kernel تمكن نظام التشغيل Android من تلقي ملفات APK المتدفقة عبر Android Debug Bridge (ADB). تنشئ وحدة kernel المستقلة نظام ملفات افتراضيًا جديدًا يجلس فوق نظام ملفات Android الحالي ويكمل التغييرات في إطار عمل Android 11 و SDK لتمكين مطوري التطبيقات والألعاب من نشر ملفات APK كبيرة من خلال ADB على جهاز Android 11.

يتيح تغيير kernel تنسيق APK Signature Scheme v4 الجديد ، ويدعم تغييرات إطار عمل Android في Android Package Manager ، وخدمات النظام الجديدة ، والتغييرات على Android Debug Bridge.

التنفيذ

يحتاج مصنعي OEM و SoC إلى إضافة برنامج تشغيل kernel جديد إلى أجهزة Android الخاصة بهم. إذا تم إنشاء برنامج تشغيل kernel كوحدة نمطية ، يتم تحميله عند الطلب. إذا لم يتم تثبيت أي تطبيق من خلال تثبيت ADB المتزايد ، فلن يقوم الجهاز بتحميل برنامج تشغيل kernel. عند البناء كجزء من صورة kernel ، يتم دائمًا تحميل برنامج التشغيل.

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

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

فيما يلي وصف للتغييرات اللازمة للتنفيذ:

  • إعداد آلة التطوير لبناء النواة.
  • استهدف النواة common-android-mainline فرع common-android-mainline .
    • $ repo init -u https://android.googlesource.com/kernel/manifest -b common-android-mainline
    • $ repo sync
  • تحقق من صحة التغييرات التالية المطلوبة لـ IncFS في الخروج من الفرع:
  • قم CONFIG_INCREMENTAL_FS=y أو CONFIG_INCREMENTAL_FS=m سطر بأسفل ملف defconfig . يمكن العثور على أمثلة على الروابط التالية:
  • بناء النواة
  • قم بتضمين kernel في بنية صورة جهاز Android .
  • بالنسبة لجهاز Android المستهدف ، قم بإلحاق أحد سطور خصائص النظام الخاصة بالمورد التالية بملف device.mk الخاص بك:
    • في حالة استخدام CONFIG_INCREMENTAL_FS=y
    • PRODUCT_PROPERTY_OVERRIDES += \
    • ro.incremental.enable=yes
    • في حالة استخدام CONFIG_INCREMENTAL_FS=m
    • PRODUCT_PROPERTY_OVERRIDES += \
    • ro.incremental.enable=module:/vendor/lib/modules/incrementalfs.ko
    • هناك أمثلة لملفات device.mk لمحاكي Android وPixel 4 .
  • فقط في حالة استخدام CONFIG_INCREMENTAL_FS=m ، أضف قواعد SE Linux .
    • قم vold.te ملف 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;
    • قم file.te قواعد SE Linux التالية بملف file.te الموجود في مجلد /system/sepolicy/vendor :
      • مثال لملف file.te
      • برنامج تشغيل نظام الملفات التزايدي
      • type vendor_incremental_module, vendor_file_type, file_type;
    • قم file_contents قواعد SE Linux التالية بملف file_contents الموجود في مجلد /system/sepolicy/vendor :
      • مثال لملف file_contents
      • # Incremental file system driver
  • /vendor/lib/modules/incrementalfs\.ko
  • u:object_r:vendor_incremental_module:s0

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

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

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

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

CTS

GTS

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

اختبار IncFs (نظام FIle تزايدي)

  • قم بإعداد بيئة التطوير.
  • استكمال مهام التنفيذ الموضحة في قسم التنفيذ.
  • قم بإجراء الاختبارات اليدوية التالية:
    • $ 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 : مثال على التثبيت

أين يمكن العثور على هذه الاختبارات؟