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

תמונת מערכת גנרית (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:

שירות 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 מ-GSI system.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 סיביות, לכן גם 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 לקבלת הוראות מפורשות להבהוב. כהנחיה כללית, כדאי לפעול לפי השלבים הבאים:

  1. מוודאים שיש במכשיר את התכונות הבאות:
    • טרבל
    • שיטה לביטול נעילה של מכשירים (כדי שאפשר יהיה למחוק אותם באמצעות 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. לאפס את נתוני המשתמש ולנקות את הנתונים ממחיצות נחוצות אחרות (עבור לדוגמה, נתוני משתמש ומחיצות מערכת):
    $ fastboot -w
  5. הפעלה מחדש:
    $ 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
ה-postfix _a צריך להתאים למזהה המיקום של מחיצת המערכת. כמו system_a בדוגמה הזו.

תרומה ל-GSI

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

  • יצירת תיקון GSI. DESSERT-gsi לא הסתעפות פיתוח, מקבלת רק המלצות ההסתעפות הראשית של AOSP, לכן כדי לשלוח תיקון GSI, צריך:
    1. שולחים את התיקון אל AOSP הסתעפות main.
    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 וכן הלאה.