לוח הבקרה של Cuttlefish

ממשק הדפדפן של WebRTC שמוגדר כברירת מחדל ב-Cuttlefish כולל לוח בקרה שמאפשר דרכים נוספות לאינטראקציה עם המכשיר הווירטואלי.

בלוח הבקרה יש לחצני ברירת מחדל לחיקוי פעולות פיזיות נפוצות במכשיר, כמו לחצן ההפעלה או לחצני עוצמת הקול, וגם כדי לסובב את המכשיר.

פעולות בהתאמה אישית

אתם יכולים להתאים אישית את לוח הבקרה כדי להוסיף עוד לחצנים שיאפשרו למכשיר הווירטואלי לחקות בצורה מדויקת יותר את המכשיר הפיזי. האפשרות הזו שימושית לבדיקה של תכונות ייחודיות למכשיר, כמו לחצן חומרה או מחווה מיוחדת שמפעילה פעולה ייחודית במערכת ההפעלה. אפשר גם להשתמש בלחצנים מותאמים אישית כדי לאפשר בדיקה של תכונות שמתמקדות יותר בבדיקת איכות, כמו ההתנהגות של מערכת ההפעלה כשהסוללה של המכשיר נמוכה.

לוח הבקרה שמוגדר כברירת מחדל ב-Cuttlefish כולל תמיכה ב'חיבורי' פעולות בהתאמה אישית בלי צורך לשנות את הפרויקט הראשי של Cuttlefish ב-AOSP. כדי להתחיל להשתמש בפעולות בהתאמה אישית, המכשיר הווירטואלי צריך לכלול רק קובץ תצורה מינימלי. קובץ תצורה לדוגמה של פעולה מותאמת אישית

  1. יוצרים קובץ JSON שמגדיר את הפעולות בהתאמה אישית של המכשיר. אפשר לשמור את הקובץ הזה בכל ספרייה שבבעלותכם. המבנה של הקובץ הזה מתואר בקטעים ADB shell ו-Action server.

  2. יוצרים מודול prebuilt_etc_host להגדרות ה-JSON. מוודאים ש-sub_dir שווה ל-cvd_custom_action_config.

    prebuilt_etc_host {
        // Use any name you choose.
        name: "my_custom_action_config.json",
        src: "my_custom_action_config.json",
        // Always use this sub_dir.
        sub_dir: "cvd_custom_action_config",
    }
    
  3. מגדירים משתני build של הגדרות Soong בקובץ makefile של המוצר במכשיר כדי להגדיר את חבילת המארח של המכשיר הווירטואלי כך שתכלול את קובץ התצורה המותאם אישית של הפעולה.

    # Set these variables exactly as shown here to enable the host package to see
    # your custom config module name.
    SOONG_CONFIG_NAMESPACES += cvd
    SOONG_CONFIG_cvd += custom_action_config
    
    # Set this value to the name of your JSON module.
    SOONG_CONFIG_cvd_custom_action_config := my_custom_action_config.json
    

יש שתי שיטות נתמכות להטמעת פעולה בהתאמה אישית:

  • פקודת Shell של ADB
  • שרת פעולות

קובץ התצורה בפורמט JSON יכול להגדיר כמה מופעים של כל סוג הטמעה.

פקודת Shell של ADB

אפשר להגדיר לחצן אחד שמופעל על ידי הפעלת פקודת adb shell אחת. לדוגמה, קטע ה-JSON הבא מגדיר לחצן אחד שמפעיל דף אינטרנט:

{
  "shell_command":"am start -a android.intent.action.VIEW -d https://www.android.com/",
  "button":{
      "command":"web",
      "title":"Web Page",
      "icon_name":"language"
  }
}

השדות הם:

  • shell_command: הפקודה שתתבצע ב-adb shell כאשר הלחצן נדחף
  • button: אובייקט לחצן יחיד עם שדות המשנה הבאים:
    • command: שם ייחודי לכפתור הזה
    • title: כותרת של טקסט חלופי לכפתור הזה
    • icon_name: שם הסמל מ-https://material.io/resources/icons

שרת פעולות

שרתי פעולות מאפשרים לכם לשלוט טוב יותר בהתנהגות של הפעולות שלכם. שרת פעולה הוא קובץ בינארי מארח שמאזין לאירועי לחיצה על לחצן מ-WebRTC באמצעות צמד שקעים. WebRTC מעביר את האירועים לשרת הפעולות, ואז שרת הפעולות מחליט איך להטמיע את הפעולה.

שרתי פעולות מאפשרים שליטה חזקה יותר, כמו שמירה על מצב (למשל, אירוע שניתן להפעיל או להשבית) או אפילו הפעלת 'פעולות-על', כמו סגירת המכשיר הנוכחי, הפעלת מכשירים נוספים או הפעלת תוסף לדפדפן לצילום מסך. האפשרויות מוגבלות רק על ידי מה שאתם מחליטים להטמיע בתוך קובץ הבינארי של המארח.

קטע ה-JSON הבא מגדיר שרת פעולות שמקשיב לאירועים בשני לחצנים:

{
  "server":"cuttlefish_example_action_server",
  "buttons":[
    {
      "command":"settings",
      "title":"Quick Settings",
      "icon_name":"settings"
    },
    {
      "command":"alert",
      "title":"Do Not Disturb",
      "icon_name":"notifications_paused"
    }
  ]
}

השדות הם:

  • server: השם של המודול הבינארי המארח
  • buttons: מערך של לחצנים, עם אותם שדות משנה כמו למעלה

אחרי שמעדכנים את קובץ התצורה של ה-JSON, מוסיפים את השם של מודול שרת הפעולות למשתנה build של קובץ התצורה של Soong‏ cvd_custom_action_servers. לדוגמה:

# Append to this variable exactly as shown here.
SOONG_CONFIG_cvd += custom_action_servers

# Append the name of your action server(s) to this variable.
SOONG_CONFIG_cvd_custom_action_servers += cuttlefish_example_action_server

כל קובץ בינארי של מארח של שרת פעולות צריך לבצע את השלבים הבאים:

  1. קבלת מספר של מתאר קובץ שקע כארגומנט הראשון והיחיד של התוכנית.

    השקע הזה נוצר על ידי launch_cvd באמצעות socketpair עם הדומיין AF_LOCAL, הסוג SOCK_STREAM והפרוטוקול 0.

  2. בלולאה, מנסים לקרוא 128 בייטים מהשקע. הבייטים האלה מכילים אירועי לחיצה על לחצן שנשלחים על ידי לקוח WebRTC בפורמט command:state. הערך של command הוא כפי שצוין בהגדרת ה-JSON, והערך של state הוא מצב הלחיצה על הלחצן (down או up).

  3. מבצעים פעולות על האירועים הנכנסים כדי לדמות את הפעולה בהתאמה אישית.