לוח בקרה של דיונון

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

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

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

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

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

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

  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 של config config בקובץ ה-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
    

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

  • פקודת מעטפת ADB
  • שרת פעולות

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

פקודת מעטפת 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/icon

שרת פעולות

שרתי פעולות מאפשרים שליטה רבה יותר על התנהגות הפעולות שלכם. פעולה השרת הוא קובץ בינארי של מארח שמאזינים לאירועי לחיצה על לחצנים מ-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 של הגדרת ה-Sung 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. אישור מספר מתאר של קובץ socket כתוכנית הראשונה והיחידה ארגומנט.

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

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

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