תמונת מערכת גנרית (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 כולל תמיכה מלאה בשינויים ארכיטקטוניים שמבוססים על 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 או עודכנו ל-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 שטוחים ודחוסים.
המערכת קובעת באיזה מהם להשתמש לפי מאפיין המערכת
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. השלבים הבאים הם הנחיות כלליות:
- חשוב לוודא שבמכשיר יש את הדברים הבאים:
- Treblized
- שיטה לביטול נעילת מכשירים (כדי שאפשר יהיה להפעיל עליהם Flash באמצעות
fastboot
) - מצב לא נעול כדי שיהיה אפשר להפעיל אותו באמצעות
fastboot
(כדי לוודא שיש לכם את הגרסה העדכנית שלfastboot
, צריך לבנות אותה מעץ המקור של Android).
- מוחקים את מחיצת המערכת הנוכחית, ואז מצמידים את ה-GSI למחיצת המערכת.
- למחוק את נתוני המשתמש ולנקות את הנתונים ממחיצות נדרשות אחרות (לדוגמה, נתוני משתמש ומחיצות מערכת).
- מפעילים מחדש את המכשיר.
לדוגמה, כדי להפעיל 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
- משביתים את האימות של Verified Boot בזמן שמבצעים פלאשינג של קובץ ה-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 (android16-release
), לכן כדי לשלוח תיקון GSI, צריך:- שולחים את התיקון לענף AOSP
android16-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
וכן הלאה.