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

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

תמונות GSI משמשות להרצת בדיקות VTS ו-CTS-on-GSI. תמונת המערכת של מכשיר Android מוחלפת ב-GSI ואז נבדקת באמצעות Vendor Test Suite (VTS) ו-Compatibility Test Suite (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 או עודכנו ל-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 שטוחים ודחוסים. המערכת קובעת באיזה מהם להשתמש לפי מאפיין המערכת 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, השורש של תמונת המערכת מותקן כשורה של המכשיר.
  • ממשק מאגד ב-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 ארכיטקטורת המעבד הביטים של ממשק 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
    • שיטה לביטול נעילת מכשירים (כדי שאפשר יהיה להפעיל עליהם Flash באמצעות fastboot)
    • מצב לא נעול כדי שיהיה אפשר להפעיל אותו באמצעות fastboot (כדי לוודא שיש לכם את הגרסה העדכנית של fastboot, צריך לבנות אותה מעץ המקור של Android).
  2. מוחקים את מחיצת המערכת הנוכחית, ואז מצמידים את ה-GSI למחיצת המערכת.
  3. למחוק את נתוני המשתמש ולנקות את הנתונים ממחיצות נדרשות אחרות (לדוגמה, נתוני משתמש ומחיצות מערכת).
  4. מפעילים מחדש את המכשיר.

לדוגמה, כדי להפעיל 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. משביתים את האימות של Verified Boot בזמן שמבצעים פלאשינג של קובץ ה-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
כדי למחוק את מחיצת המוצר ולפנות מקום למחיצת המערכת, משתמשים בפקודה הבאה. כך מקבלים עוד מקום להצגת ה-GSI:
$ fastboot delete-logical-partition product_a
הסיומת _a צריכה להיות זהה למזהה המשבצת של מחיצת המערכת, כמו system_a בדוגמה הזו.

תרומה ל-GSI

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

  • יצירת תיקון GSI.DESSERT-gsi לא מהווה ענף פיתוח ומקבל רק cherrypicks מתוך ענף הגרסה האחרונה של AOSP‏ (android16-release), לכן כדי לשלוח תיקון GSI, צריך:
    1. שולחים את התיקון לענף AOSP android16-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 וכן הלאה.