מערכת קבצים מצטברת

מודול הליבה של מערכת הקבצים המצטברת (IncFS) נוסף ב-Android 11 מאפשר למערכת Android OS לקבל חבילות APK בסטרימינג דרך Android Debug Bridge (ADB).

מודול הליבה העצמאי הזה יוצר מערכת קבצים וירטואלית חדשה שנמצאת מעל מערכת הקבצים הקיימת של Android. פעולה זו משלימה את השינויים framework ו-SDK כדי לאפשר למפתחי אפליקציות ומשחקים לפרוס חבילות APK גדולות באמצעות את ה-ADB למכשיר עם Android 11 ואילך.

שינוי הליבה (kernel) מאפשר פורמט חתימת APK גרסה 4 של APK ותומך בשינויים במסגרת של Android ב-Android Package Manager, שירותי מערכת חדשים, ושינויים ב-ADB.

הטמעה

כדי להטמיע את ה-InFS, יצרני ציוד מקורי (OEM) ויצרני SoC צריכים להוסיף ליבה (kernel) חדשה של מכשיר ה-Android שלהם.

ב-Android 11 בלבד, אם מנהל התקן הליבה בנוי כמודול והוא נטען לפי דרישה. אם המיקום אין אפליקציות שהותקנו דרך התקנה מצטברת של ADB, המכשיר לא טוען את מנהל התקן הליבה.

אחרת, כשהוא בונה כחלק מהליבה תמונה, מנהל ההתקן תמיד נטען. ההטמעה הזאת תקפה עבור מערכת Android מגרסה 12 ואילך, ואפשר להשתמש בה עם Android 11. עבור מידע על שדרוג מנהל התקן הליבה ל-Android 12: שדרוג של מנהל התקן ליבה.

מנהל התקן הליבה הוא חלק ממערכת גדולה יותר שמאפשרת הפעלה של APK בסטרימינג התקנות. יצרני ציוד מקורי (OEM) וספקים לא צריכים להשתמש בקוד IncFS המדויק שסופק בהטמעות לדוגמה. עם זאת, כדי להבטיח חוויה עקבית עליך לוודא שלהטמעה של ה-API יש מערכת קבצים שיש לו פונקציונליות של קריאת קבצים ופונקציונליות של קריאה-כתיבה בספריות, שמוגדר במסמכי התיעוד של Userspace Interface ל-FS מצטבר.

בנוסף, בהטמעות צריכות להיות אפשרויות טעינה וקבצים מיוחדים שתואמים מבחינה פונקציונלית להטמעה של דוגמת IncFS.

בטבלה הבאה מפורטים השינויים הנדרשים להטמעה:

  1. הגדרת מכונת הפיתוח כדי לפתח את הליבה.
  2. לטרגט את הליבה (kernel) המשותפת מההסתעפות 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. הטמעת הליבה בגרסת ה-build של קובץ Android במכשיר 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

שדרוג מנהל התקן ליבה

יכול להיות שמכשירים שמשדרגים ל-Android 12 כוללים גרסה ישנה יותר של IncFS. לנהג. במכשירים האלה, AOSP ממליץ לעדכן את מנהל ההתקן של IncFS את הגרסה הנוכחית (במקרה הזה v2) מהסיבות הבאות:

  • הגרסה שפורסמה עם Android 11 היא ההטמעה הראשונית של IncFS, מטורגטים רק לתמיכה בהתקנת ADB.
  • ב-Android 12 משתמשים במנהל ההתקן של IncFS להתקנות בסטרימינג של משחקים ב-Play. שדורשות את התכונות החדשות והאופטימיזציות של IncFS v2 כדי לשפר את חוויית השימוש חוויה אישית.
  • V1 תומך בסטרימינג של משחקים, אבל עושה זאת באמצעות שיפורי ביצועים שימוש גבוה יותר בסוללה, במעבד (CPU) וב-RAM מאשר בגרסה 2.
  • V2 מספק חוויית משתמש משופרת לסטרימינג, עם אנימציות התקדמות חלקות. דיווח מדויק על השימוש בשטח הדיסק, ומניעת סטרימינג של אפליקציות של צד שלישי הפרעות.

כדי לשדרג את מנהל התקן של IncFS בליבה, צריך להחיל את התיקונים הבאים עבור ליבה (kernel) 4.14 או ליבה (kernel) 4.19:

לכל גרסאות ליבה אחרות בהתאמה אישית, צריך לנייד אחד ממערכי התיקונים. הם ישפיעו רק על ספריית fs/incfs ויחולו בצורה ברורה על בקוד v1 קיים.

ממשיכים להשתמש במנהל התקן IncFS באותו אופן שבו השתמשת במקור, אבל עכשיו את Android 11, כחלק מובנה מתמונת הליבה, או כמודול נפרד. לא לשנות את לוח המערכת או את מאפיין המערכת הגדרה אישית.

מכשירים חדשים שמשתמשים בתמונת ליבה של GKI מקבלים את מנהל התקן (v2) IncFS העדכני ביותר באופן אוטומטי, מוגדר כחלק מתמונת הליבה. לא נדרשים שלבים נוספים.

ההגדרה של המודול שניתן לטעינה הוצאה משימוש ב-Android 12, והיא לא נתמך במכשירים חדשים. מותר לעשות זאת רק בשדרוגים או אצל ספק התמונה קופאת כשהליבה המקורית כבר נבנה כמודול.

הטמעות של קובצי עזר

ניתן להתייחס להטמעה הזו כחלק מתמונת ליבה, או (עבור Android 11 בלבד) כמודול שניתן לטעינה.

מודול שניתן לטעינה (מכשיר Pixel 4) אמולטור Android (כחלק מתמונת הליבה)

אימות ובדיקה

תוכלו לאמת את ההטמעה באמצעות בדיקות של יחידת תכונות, CTS ו-GTS.

CTS

שימוש בכתובת CtsIncrementalInstallHostTestCases.

GTS

atest GtsIncrementalInstallTestCases:

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

בדיקת ה-InFS

  1. להגדיר סביבת פיתוח.
  2. יש להשלים את משימות ההטמעה שמפורטות בקטע ההטמעה.
  3. מריצים את הבדיקות הידניות הבאות:
    mmma system/incremental_delivery/incfs/tests
    atest libincfs-test
    atest IncrementalServiceTest
    atest PackageManagerShellCommandTest
    PackageManagerShellCommandIncrementalTest

בדיקת IncFS עם Android SDK (ADB ו-APKsigner)

  • הגדרה סביבת פיתוח.
  • יש להשלים את משימות ההטמעה שמפורטות בקטע ההטמעה.
  • Flash – גרסת ה-build במכשיר פיזי או באמולטור יעד.
  • ליצור או להשיג APK קיים.
  • יוצרים מפתח חתימה לניפוי באגים.
  • חותמים על ה-APK בפורמט החתימה v4 מהתיקייה build-tools.
    ./apksigner sign --ks debug.keystore game.apk
  • מתקינים את ה-APK במכשיר מplatform-tools .
    ./adb install game.apk
דוגמה להתקנה
איור 1: דוגמה להתקנה

איתור הבדיקות האלה