קובץ אימג' גנרי של המערכת (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 כולל תמיכה מלאה בשינויים ארכיטקטוניים שמבוססים על AIDL/HIDL (שנקראים גם Treble), כולל תמיכה בממשקי AIDL ובממשקי HIDL. אפשר להשתמש ב-GSI בכל מכשיר Android שמשתמש בממשקי ספקים של AIDL/HIDL. (פרטים נוספים זמינים במאמר משאבי ארכיטקטורה).
- מערכת קבצים. ה-GSI משתמש במערכת הקבצים ext4.
ה-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מ-GSIsystem.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-usergsi_arm-userdebug |
gsi_arm64 |
ARM64 | 64 | Y | gsi_arm64-usergsi_arm64-userdebug |
gsi_x86 |
x86 | 32 | Y | gsi_x86-usergsi_x86-userdebug |
gsi_x86_64 |
x86-64 | 64 | Y | gsi_x86_64-usergsi_x86_64-userdebug |
דרישות להפעלת GSI
למכשירי Android יכולים להיות עיצובים שונים, ולכן אין פקודה כללית או קבוצת הוראות להעברת GSI שמתאימה לכל המכשירים. כדי לקבל הוראות מפורטות להפעלה, צריך לפנות ליצרן של מכשיר Android. השלבים הבאים הם הנחיות כלליות:
- חשוב לוודא שבמכשיר יש את הדברים הבאים:
- Treblized
- שיטה לביטול נעילת המכשירים (כדי שאפשר יהיה להפעיל בהם את
fastboot) - מצב לא נעול כדי שיהיה אפשר להפעיל אותו באמצעות
fastboot(כדי לוודא שיש לכם את הגרסה העדכנית שלfastboot, צריך לבנות אותה מעץ המקור של Android).
- מוחקים את מחיצת המערכת הנוכחית, ואז מצמידים את ה-GSI למחיצת המערכת.
- למחוק את נתוני המשתמש ולנקות את הנתונים ממחיצות נדרשות אחרות (לדוגמה, נתוני משתמש ומחיצות מערכת).
- מפעילים מחדש את המכשיר.
לדוגמה, כדי לצרוב ROM (flash) GSI בכל מכשיר Pixel:
- מפעילים את המכשיר במצב
fastbootופותחים את תוכנת האתחול. - המכשירים שתומכים ב-
fastbootdצריכים גם לבצע אתחול ל-fastbootdבאמצעות:$ fastboot reboot fastboot
- מוחקים את ה-GSI ומעדכנים אותו למחיצת המערכת:
$ fastboot erase system $ fastboot flash system system.img
- אם המכשיר תומך ב-Android Virtual Framework, צריך לצרוב את קושחת המכונה הווירטואלית המוגנת:
$ fastboot flash pvmfw pvmfw.img
- מחיקת נתוני המשתמש וניקוי הנתונים ממחיצות נדרשות אחרות (לדוגמה, נתוני משתמש ומחיצות מערכת):
$ fastboot -w
- מפעילים מחדש את המכשיר בחזרה לתוכנת האתחול:
$ fastboot reboot-bootloader
- משביתים את האימות של הפעלה מאומתת בזמן הצריבה של קובץ ה-vbmeta שסופק:
$ fastboot --disable-verification flash vbmeta vbmeta.img
- Reboot:
$ fastboot reboot
Resizing 'system_a' FAILED (remote: 'Not enough space to resize partition')
fastboot: error: Command failed$ fastboot delete-logical-partition product_a
_a צריכה להיות זהה למזהה המשבצת של מחיצת המערכת, כמו system_a בדוגמה הזו.
תרומה ל-GSI
אנחנו ב-Android מזמינים אתכם לתרום לפיתוח של GSI. אתם יכולים להשתתף ולעזור לשפר את ה-GSI על ידי:
- יצירת תיקון GSI.
DESSERT-gsiלא מוגדר כענף פיתוח, ואפשר להוסיף לו רק cherrypicks מהענף של הגרסה האחרונה של AOSP (android17-release). לכן, כדי לשלוח תיקון GSI, צריך:- שולחים את התיקון לענף AOSP
android17-release. - בוחרים את התיקון ל-
DESSERT-gsi. - כדי שהשינוי יבדק, צריך להגיש דוח על באג.
- שולחים את התיקון לענף AOSP
- דיווח על באגים ב-GSI או שליחת הצעות אחרות. קוראים את ההוראות במאמר דיווח על באגים, ואז מעיינים בבאגים ב-GSI או מדווחים עליהם.
טיפים
שינוי המצב של סרגל הניווט באמצעות adb
כשמבצעים אתחול באמצעות GSI, מצב סרגל הניווט מוגדר על ידי ספק שמבצע שינוי בהגדרות ברירת המחדל. אפשר לשנות את המצב של סרגל הניווט על ידי הפעלת פקודת ה-adb הבאה בזמן הריצה.
adb exec-out cmd overlay enable-exclusive com.android.internal.systemui.navbar.mode
כאשר mode יכול להיות threebutton, twobutton, gestural וכן הלאה.