תמונת מערכת גנרית (GSI) היא תמונת מערכת עם הגדרות מותאמות למכשירי Android. זה נחשב ליישום Android טהור באמצעות קוד פרויקט קוד פתוח של Android (AOSP) שלא בוצעו בו שינויים, שכל מכשיר Android מכשירים עם Android מגרסה 9 ואילך יכולים לפעול בהצלחה.
GSI משמש להרצת בדיקות VTS ו-CTS-on-GSI. תמונת המערכת של מכשיר Android מוחלף ב-GSI ואז נבדק עם Vendor Test Suite (VTS) חבילה לבדיקת תאימות (CTS) כדי לוודא שהמכשיר מיישם ממשקים של ספקים בצורה תקינה עם הגרסה האחרונה של Android.
כדי להתחיל להשתמש ב-GSI, יש לעיין בקטעים הבאים לקבלת פרטים על הגדרות GSI (ומותר שונים) וסוגים. כשתהיו מוכנים להשתמש ב-GSI, להוריד ולבנות את GSI עבור המכשיר יעד, ולאחר מכן יהבהב את GSI ל-Android במכשיר.
תצורה ושונות של GSI
ההגדרות הנוכחיות של Android GSI:
- טרבל. GSI כולל תמיכה מלאה שינויים בארכיטקטורה שמבוססים על AIDL/HIDL (מוכר גם בשם Treble), כולל תמיכה ממשקי AIDL וגם ממשקי HIDL. אפשר להשתמש ב-GSI ב- כל מכשיר Android עם ממשקי ספקים של AIDL/HIDL. (פרטים נוספים זמינים במאמר משאבי ארכיטקטורה).
- מערכת קבצים. GSI משתמש במערכת הקבצים ext4.
שירות Android GSI הנוכחי כולל את ההבדלים העיקריים הבאים:
- ארכיטקטורת ה-CPU. תמיכה בהוראות שונות לגבי מעבדים (CPU) (ARM, x86 וכו') וקצב העברת הנתונים של המעבד (32 ביט או 64 ביט).
יעדי GSI לבדיקות תאימות ל-Treble
ה-GSI שמשמש לבדיקות התאימות נקבע על ידי גרסת Android שהמכשיר מופעל איתו.
סוג מכשיר | יצירת יעד |
---|---|
מכשירים שמושקים עם 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 מבוססים על ה-codebase של Android 12, וגם לכל ארכיטקטורת מעבד (CPU) יש בינארי GSI תואם (ראו את רשימת ה-build יעדים בבניית GSI).
שינויים ב-Android 12 GSI
מכשירים שמותקנת בהם מערכת ההפעלה Android 12 או שמותקנת בהם מערכת ההפעלה Android חייבים להשתמש ב-Android 12 כללי GSI לבדיקות תאימות. האיסור הזה כולל בעקבות השינויים העיקריים מכללי ה-GSI הקודמים:
- שם היעד. שם היעד של GSI לתאימות
הבדיקות ישתנו ל-
gsi_$arch
. GSI עם שם היעדaosp_$arch
נשמר למפתחים של אפליקציות ל-Android. תוכנית הבדיקה הערך שלCTS-on-GSI
מופחת גם עבור הממשק של הספק לבדיקה. - שירותי GSI מדור קודם יצאו משימוש. GSI 12 מסירה את הפתרונות לעקוף את מכשירי Android בגרסה 8.0 או 8.1 לא מותאמים במלואם.
- Userdebug SEPolicy.
gsi_$arch
של GSI מכילuserdebug_plat_sepolicy.cil
. עם הבהובvendor_boot-debug.img
או מוצרים ספציפיים ל-OEM (יצרן הציוד המקורי)boot-debug.img
,/system/bin/init
ייטעןuserdebug_plat_sepolicy.cil
מ-GSIsystem.img
אפליקציות עזר בדיקות VTS באמצעות ניפוי באגים ב-Ramdisk כדי לקבל את הפרטים.
שינויים ב-Android 11 GSI
במכשירים שמותקנת בהם מערכת ההפעלה Android 11 או שמותקנת בהם מערכת ההפעלה Android 11 חייבת להיות מותקנת בהם מערכת Android 11 כללי GSI לבדיקות תאימות. האיסור הזה כולל בעקבות השינויים העיקריים מכללי ה-GSI הקודמים:
- system_ext. תוכן. Android
11 מגדיר חלוקה חדשה
system_ext
. GSI מעביר את התוכן של תוסף המערכת מתחת לתיקייהsystem/system_ext
- APEX. GSI מכיל גם נתוני APEX שטוחים וגם דחוסים.
היעד שבו צריך להשתמש נקבע באמצעות מאפיין המערכת
ro.apex.updatable
במחיצת הספק בזמן הריצה. אפליקציות עזר הגדרת המערכת שתתמוך בעדכוני APEX כדי לספק את כל הפרטים.
שינויים ב-Android 10 GSI
מכשירים שמותקנת בהם מערכת ההפעלה Android 10 או שמותקנת בהם מערכת ההפעלה Android 10 חייבים להשתמש ב-Android 10 כללי GSI לבדיקות תאימות. האיסור הזה כולל בעקבות השינויים העיקריים מכללי ה-GSI הקודמים:
- גרסת build של משתמש. ל-GSI יש גרסת build של משתמש מ-Android 10. ב-Android 10, ניתן להשתמש ב-GSI build של משתמש בבדיקות תאימות ל-CTS-on-GSI/VTS. אפליקציות עזר בדיקת VTS באמצעות ניפוי באגים Ramdisk לקבלת פרטים.
- פורמט ללא ניתוח. GSI עם יעדים
aosp_$arch
בנויים בפורמט ללא ניתוח. אפשר להשתמשimg2simg
כדי להמיר GSI שלא נותח לפורמט חלש אם הנחוצים. - מערכת ברמה הבסיסית (root). יעד ה-build הקודם של GSI בשם
aosp_$arch_a
הוצא משימוש. למכשירים ששודרגו מ-Android 8 או 8.1 עד Android 10 עם ramdisk שהוא לא מערכת ברמה הבסיסית (root), צריך להשתמש ב-aosp_$arch_ab
הקודם של GSI. הגרסה המשודרגת שלinit
ב-ramdisk תומכת ב-OEM system.img עם פריסת מערכת ברמה הבסיסית (root). - מאמתים את ההפעלה. באמצעות GSI צריך רק לבטל את נעילת המכשיר. אין צורך להשבית את אימות ההפעלה.
שינויים ב-Android 9 GSI
מכשירים שמותקנת בהם מערכת ההפעלה Android 9 או שמותקנת בהם מערכת ההפעלה Android 9 חייבים להשתמש ב-Android 9 כללי GSI לבדיקות תאימות. האיסור הזה כולל בעקבות השינויים העיקריים מכללי ה-GSI הקודמים:
- מיזוג בין GSI לבין אמולטור. GSI נבנה באמצעות המערכת
תמונות של מוצרי אמולטור, לדוגמה,
aosp_arm64
וגםaosp_x86
. - מערכת ברמה הבסיסית (root). בגרסאות קודמות של Android, מכשירים
שלא תומכים בעדכוני A/B יכולים לטעון את תמונת המערכת מתחת
ספריית
/system
. ב-Android 9, הרמה הבסיסית (root) של תמונת המערכת נטענת בתור הרמה הבסיסית (root) של המכשיר. - ממשק binder מסוג 64 ביט ב-Android מגרסה 8.x, GSI של 32 ביט להשתמש בממשק binder בגרסת 32 סיביות. 9 Android לא תומך בממשק binder של 32-bit, לכן גם GSI של 32 סיביות GSI ב-64 ביט משתמש בממשק binder של 64 ביט.
- אכיפה של VNDK. ב-Android גרסה 8.1, VNDK היה אופציונלי.
החל מ-Android 9, חובה להשתמש ב-VNDK, לכן
חובה להגדיר את
BOARD_VNDK_VERSION
. - מאפיין מערכת תואם. במכשירי Android
9 מאפשר את בדיקת הגישה כדי למצוא
מאפיין מערכת (
PRODUCT_COMPATIBLE_PROPERTY_OVERRIDE := true
).
9 Android שינויים ב-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
target. כדי לקבוע את ה-GSI הנכון, צריך להשתמש בטבלאות היעדים של ה-build שבהמשך
עבור המכשיר שלך. בסיום ה-build, ה-GSI הוא המערכת
תמונה (כלומר system.img
) ומופיעה בתיקיית הפלט
out/target/product/generic_arm64
.
לדוגמה, כדי ליצור יעד build של 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 של Android GSI
יעדי ה-build הבאים של GSI מיועדים למכשירים שמושקים ב-Android 9 ומעלה.
שם GSI | קשת במעבד (CPU) | ביטים בממשק Binder | מערכת ברמה הבסיסית (root) | יצירת יעד |
---|---|---|---|---|
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 לקבלת הוראות מפורשות להבהוב. כהנחיה כללית, כדאי לפעול לפי השלבים הבאים:
- מוודאים שיש במכשיר את התכונות הבאות:
- טרבל
- שיטה לביטול נעילה של מכשירים (כדי שאפשר יהיה לעדכן אותם באמצעות
fastboot
) - מצב לא נעול כדי שיהיה אפשר להבהב דרך
fastboot
(כדי לוודא שאתם משתמשים בגרסה העדכנית ביותר שלfastboot
, עליכם מעץ המקור של Android.)
- מחיקה של מחיצת המערכת הנוכחית ואז הבהוב ה-GSI למערכת מחיצה.
- לאפס את נתוני המשתמש ולנקות את הנתונים ממחיצות נחוצות אחרות (עבור לדוגמה, נתוני משתמש ומחיצות מערכת).
- מפעילים מחדש את המכשיר.
לדוגמה, כדי להבהב GSI לכל מכשיר Pixel:
- יש לעלות אל
מצב
fastboot
לבטל את הנעילה של תוכנת אתחול. - המכשירים התומכים
fastbootd
צריך גם לבצע אתחול אלfastbootd
באמצעות:$ fastboot reboot fastboot
- מוחקים ופלאשים את ה-GSI למחיצת המערכת:
$ fastboot erase system $ fastboot flash system system.img
- לאפס את נתוני המשתמש ולנקות את הנתונים ממחיצות נחוצות אחרות (עבור
לדוגמה, נתוני משתמש ומחיצות מערכת):
$ fastboot -w
- הפעלה מחדש:
$ 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
לא הסתעפות פיתוח, מקבלת רק המלצות ההסתעפות הראשית של AOSP, לכן כדי לשלוח תיקון GSI, צריך:- שולחים את התיקון אל
AOSP
הסתעפות
main
. - צריך לבחור את התיקון בשדה
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
וכן הלאה.