תמונות מערכת גנריות

קובץ אימג' גנרי של המערכת (GSI) הוא קובץ אימג' של המערכת עם הגדרות מותאמות למכשירי Android. היא נחשבת להטמעה של Android טהור עם קוד לא משונה של פרויקט קוד פתוח של Android ‏ (AOSP), שכל מכשיר Android עם Android מגרסה 9 ומעלה יכול להריץ בהצלחה.

תמונות GSI משמשות להרצת בדיקות VTS ו-CTS-on-GSI. קובץ האימג' של מערכת במכשיר Android מוחלף ב-GSI ואז נבדק באמצעות חבילת בדיקות הספק (VTS) וחבילת בדיקות התאימות (CTS) כדי לוודא שהמכשיר מיישם את ממשקי הספק בצורה נכונה עם הגרסה העדכנית של Android.

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

הגדרות ושינויים ב-GSI

ההגדרה הנוכחית של GSI ב-Android היא:

ה-GSI הנוכחי של Android כולל את השונות העיקרית הבאה:

  • ארכיטקטורת המעבד (CPU) תמיכה בהוראות שונות של מעבדים (ARM,‏ x86 וכו') ובסוג המעבד (32 ביט או 64 ביט).

יעדי GSI לבדיקות תאימות ל-Treble

מערכת ה-GSI שמשמשת לבדיקת התאימות נקבעת לפי גרסת Android שהמכשיר מופעל איתה.

סוג מכשיר יעד Build
מכשירים שיושקו עם Android 15 gsi_$arch-user (חתום)
מכשירים שיושקו עם Android 14 gsi_$arch-user (חתום)
מכשירים שיושקו עם Android 13 gsi_$arch-user (חתום)
מכשירים שמופעלת בהם מערכת Android 12L gsi_$arch-user (חתום)
מכשירים שמופעלת בהם מערכת Android 12 gsi_$arch-user (חתום)
מכשירים שיושקו עם Android 11 gsi_$arch-user (חתום)

כל תמונות ה-GSI נוצרות מבסיס הקוד של Android 12, ולכל ארכיטקטורת CPU יש קובץ בינארי GSI תואם (אפשר לעיין ברשימת יעדי הבנייה במאמר יצירת תמונות GSI).

שינויים ב-GSI ב-Android 12

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

  • שם היעד. שם היעד של GSI לבדיקות תאימות השתנה ל-gsi_$arch. ה-GSI עם שם היעד aosp_$arch נשמר למפתחי אפליקציות ל-Android. תוכנית הבדיקה CTS-on-GSI מקוצרת גם לממשק של ספק הבדיקה.
  • הוצאנו משימוש את GSI מדור קודם. ‫GSI 12 מסיר את הפתרונות העקיפים שמתאימים למכשירי Android 8.0 או 8.1 שלא עברו Treblization מלאה.
  • Userdebug SEPolicy. ‫GSI gsi_$arch כולל userdebug_plat_sepolicy.cil. כשמבצעים פלאשינג של vendor_boot-debug.img או boot-debug.img הספציפיים ליצרן הציוד המקורי, /system/bin/init טוען את userdebug_plat_sepolicy.cil מ-GSI system.img. פרטים נוספים מופיעים במאמר בנושא בדיקות VTS עם Debug Ramdisk.

שינויים ב-GSI ב-Android 11

במכשירים שהושקו עם Android מגרסה 11 ואילך או עודכנו לגרסה הזו, צריך להשתמש ב-GSI של Android 11 לבדיקות תאימות. השינויים העיקריים לעומת גרסאות GSI קודמות:

  • תוכן של system_ext. ‫Android 11 מגדיר מחיצה חדשה system_ext. ‫GSI מציב את התוכן של תוסף המערכת בתיקייה system/system_ext.
  • APEXes. קובץ ה-GSI מכיל גם קובצי APEX שטוחים וגם קובצי APEX דחוסים. המערכת קובעת באיזה מהם להשתמש לפי מאפיין המערכת ro.apex.updatable במחיצת הספק בזמן הריצה. פרטים נוספים זמינים במאמר בנושא הגדרת המערכת לתמיכה בעדכוני APEX.

שינויים ב-GSI ב-Android 10

מכשירים שמופעלת בהם מערכת Android 10 או שמערכת Android 10 מותקנת בהם, חייבים להשתמש ב-GSI של Android 10 לבדיקות תאימות. השינויים העיקריים לעומת גרסאות GSI קודמות:

  • משתמש build. ל-GSI יש גרסת build למשתמש מ-Android 10. ב-Android 10, אפשר להשתמש ב-GSI של גרסת משתמש בבדיקות תאימות של CTS-on-GSI/VTS. פרטים נוספים זמינים במאמר בנושא בדיקות VTS עם Debug Ramdisk.
  • פורמט לא דליל. ‫GSI עם יעדים aosp_$arch נוצרים בפורמט לא דליל. אפשר להשתמש ב-img2simg כדי להמיר GSI לא דליל לפורמט דליל אם יש צורך בכך.
  • System-as-root. הוצאנו משימוש את יעד הבנייה של GSI מדור קודם שנקרא aosp_$arch_a. במכשירים ששודרגו מ-Android 8 או 8.1 ל-Android 10 עם ramdisk ועם non-system-as-root, צריך להשתמש ב-GSI מדור קודם aosp_$arch_ab. ‫init המשודרג ב-ramdisk תומך ב-system.img של יצרן ציוד מקורי (OEM) עם פריסה של מערכת כשורש.
  • אימות האתחול כדי להשתמש ב-GSI, צריך רק לבטל את נעילת המכשיר. אין צורך להשבית את ההפעלה המאומתת.

שינויים ב-GSI ב-Android 9

מכשירים שמופעלים עם Android 9 או מעודכנים ל-Android 9 חייבים להשתמש ב-GSI של Android 9 לבדיקות תאימות. השינויים העיקריים לעומת גרסאות GSI קודמות:

  • מיזוג של GSI ואמולטור. תמונות GSI נוצרות מתמונות המערכת של מוצרי אמולטור, לדוגמה, aosp_arm64 ו-aosp_x86.
  • System-as-root. בגרסאות קודמות של Android, מכשירים שלא תמכו בעדכוני A/B יכלו לטעון את קובץ האימג' של המערכת בספרייה /system. ב-Android 9, השורש של קובץ אימג' של המערכת מותקן כשרוש של המכשיר.
  • ממשק binder ב-64 ביט. ב-Android 8.x, מערכות GSI של 32 ביט השתמשו בממשק Binder של 32 ביט. ‫Android 9 לא תומך בממשק Binder ב-32 ביט, ולכן גם תמונות מערכת כלליות (GSI) ב-32 ביט וגם תמונות מערכת כלליות (GSI) ב-64 ביט משתמשות בממשק Binder ב-64 ביט.
  • אכיפת VNDK. ב-Android 8.1, ‏ VNDK היה אופציונלי. החל מ-Android 9, ‏ VNDK הוא חובה, ולכן צריך להגדיר את BOARD_VNDK_VERSION .
  • מאפיין מערכת תואם. ‫Android 9 מאפשרת בדיקת גישה למאפיין מערכת תואם (PRODUCT_COMPATIBLE_PROPERTY_OVERRIDE := true).

‫Android 9 שינויים ב-Keymaster

בגרסאות קודמות של Android, מכשירים שמטמיעים Keymaster בגרסה 3 ומטה נדרשו לאמת שפרטי הגרסה (ro.build.version.release ו-ro.build.version.security_patch) שדווחו על ידי המערכת הפועלת תואמים לפרטי הגרסה שדווחו על ידי תוכנת האתחול. המידע הזה נלקח בדרך כלל מכותרת תמונת האתחול.

ב-Android מגרסה 9 ואילך, הדרישה הזו השתנתה כדי לאפשר לספקים להפעיל GSI. באופן ספציפי, Keymaster לא צריך לבצע אימות כי פרטי הגרסה שמדווחים על ידי GSI לא תואמים לפרטי הגרסה שמדווחים על ידי טוען האתחול של הספק. במכשירים שמוטמעת בהם גרסה Keymaster 3 או גרסה נמוכה יותר, הספקים צריכים לשנות את ההטמעה של Keymaster כדי לדלג על האימות (או לשדרג לגרסה Keymaster 4). פרטים על Keymaster מופיעים במאמר בנושא Keystore עם גיבוי חומרה.

הורדת תמונות מערכת כלליות (GSI)

אפשר להוריד תמונות GSI מוכנות מראש מאתר השילוב הרציף (CI) של AOSP בכתובת ci.android.com. אם סוג ה-GSI של פלטפורמת החומרה שלכם לא זמין להורדה, אפשר לעיין בקטע הבא כדי לקבל פרטים על בניית תמונות GSI ליעדים ספציפיים.

יצירת תמונות מערכת כלליות (GSI)

החל מ-Android 9, לכל גרסת Android יש ענף GSI בשם DESSERT-gsi ב-AOSP (לדוגמה, android12-gsi הוא ענף ה-GSI ב-Android 12). ענפי GSI כוללים את התוכן של Android עם כל תיקוני האבטחה ותיקוני ה-GSI שהוחלו.

כדי ליצור GSI, צריך להגדיר את עץ המקור של Android על ידי הורדה מענף GSI ובחירת יעד build של GSI. כדי לקבוע את גרסת ה-GSI הנכונה למכשיר שלכם, תוכלו להיעזר בטבלאות שלמטה עם יעדי הבנייה. אחרי שה-build מסתיים, ה-GSI הוא קובץ האימג' של המערכת (כלומר, system.img) והוא מופיע בתיקיית הפלט out/target/product/generic_arm64.

לדוגמה, כדי ליצור את יעד הבנייה של GSI‏ gsi_arm64-userdebug בענף GSI‏ android12-gsi, מריצים את הפקודות הבאות.

$ repo init -u https://android.googlesource.com/platform/manifest -b android12-gsi
$ repo sync -cq
$ source build/envsetup.sh
$ lunch gsi_arm64-userdebug
$ make -j4

יעדי build של GSI ב-Android

יעדי הבנייה הבאים של GSI מיועדים למכשירים עם Android מגרסה 9 ומעלה.

שם ה-GSI ארכיטקטורת המעבד (CPU) הביטים של ממשק ה-Binder System-as-root יעד Build
gsi_arm דריכה 32 Y gsi_arm-user
gsi_arm-userdebug
gsi_arm64 ARM64 64 Y gsi_arm64-user
gsi_arm64-userdebug
gsi_x86 x86 32 Y gsi_x86-user
gsi_x86-userdebug
gsi_x86_64 x86-64 64 Y gsi_x86_64-user
gsi_x86_64-userdebug

דרישות להפעלת GSI

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

  1. חשוב לוודא שבמכשיר יש את הדברים הבאים:
    • Treblized
    • שיטה לביטול נעילת המכשירים (כדי שאפשר יהיה להפעיל בהם את fastboot)
    • מצב לא נעול כדי שיהיה אפשר להפעיל אותו באמצעות fastboot (כדי לוודא שיש לכם את הגרסה העדכנית של fastboot, צריך לבנות אותה מעץ המקור של Android).
  2. מוחקים את מחיצת המערכת הנוכחית, ואז מצמידים את ה-GSI למחיצת המערכת.
  3. למחוק את נתוני המשתמש ולנקות את הנתונים ממחיצות נדרשות אחרות (לדוגמה, נתוני משתמש ומחיצות מערכת).
  4. מפעילים מחדש את המכשיר.

לדוגמה, כדי לצרוב ROM‏ (flash) GSI בכל מכשיר Pixel:

  1. מפעילים את המכשיר במצב fastboot ופותחים את תוכנת האתחול.
  2. המכשירים שתומכים ב-fastbootd צריכים גם לבצע אתחול ל-fastbootd באמצעות:
    $ fastboot reboot fastboot
  3. מוחקים את ה-GSI ומעדכנים אותו למחיצת המערכת:
    $ fastboot erase system
    $ fastboot flash system system.img
  4. אם המכשיר תומך ב-Android Virtual Framework, צריך לצרוב את קושחת המכונה הווירטואלית המוגנת:
    $ fastboot flash pvmfw pvmfw.img
    
  5. מחיקת נתוני המשתמש וניקוי הנתונים ממחיצות נדרשות אחרות (לדוגמה, נתוני משתמש ומחיצות מערכת):
    $ fastboot -w
  6. מפעילים מחדש את המכשיר בחזרה לתוכנת האתחול:
    $ fastboot reboot-bootloader
  7. משביתים את האימות של הפעלה מאומתת בזמן הצריבה של קובץ ה-vbmeta שסופק:
    $ fastboot --disable-verification flash vbmeta vbmeta.img
  8. Reboot:
    $ fastboot reboot
במכשירים עם Android מגרסה 10 ואילך שיש להם מחיצות מערכת קטנות יותר, יכול להיות שתופיע הודעת השגיאה הבאה כשמבצעים פלאשינג של GSI:
    Resizing 'system_a'    FAILED (remote: 'Not enough space to resize partition')
    fastboot: error: Command failed
כדי למחוק את מחיצת המוצר ולפנות מקום למחיצת המערכת, משתמשים בפקודה הבאה. כך מקבלים עוד מקום לצריבת ROM‏ (flash) של ה-GSI:
$ fastboot delete-logical-partition product_a
הסיומת _a צריכה להיות זהה למזהה המשבצת של מחיצת המערכת, כמו system_a בדוגמה הזו.

תרומה ל-GSI

אנחנו ב-Android מזמינים אתכם לתרום לפיתוח של GSI. אתם יכולים להשתתף ולעזור לשפר את ה-GSI על ידי:

  • יצירת תיקון GSI.DESSERT-gsi לא מוגדר כענף פיתוח, ואפשר להוסיף לו רק cherrypicks מהענף של הגרסה האחרונה של AOSP (‏android17-release). לכן, כדי לשלוח תיקון GSI, צריך:
    1. שולחים את התיקון לענף AOSP android17-release.
    2. בוחרים את התיקון ל-DESSERT-gsi.
    3. כדי שהשינוי יבדק, צריך להגיש דוח על באג.
  • דיווח על באגים ב-GSI או שליחת הצעות אחרות. קוראים את ההוראות במאמר דיווח על באגים, ואז מעיינים בבאגים ב-GSI או מדווחים עליהם.

טיפים

שינוי המצב של סרגל הניווט באמצעות adb

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

adb exec-out cmd overlay enable-exclusive com.android.internal.systemui.navbar.mode

כאשר mode יכול להיות threebutton, twobutton, gestural וכן הלאה.