ממשק הדפדפן של WebRTC שמוגדר כברירת מחדל ב-Cuttlefish כולל לוח בקרה שמאפשר יותר דרכים לאינטראקציה עם המכשיר הווירטואלי.
לוח הבקרה כולל לחצני ברירת מחדל שמדמים פעולות פיזיות נפוצות במכשיר, כמו לחצן ההפעלה או לחצני עוצמת הקול, וגם סיבוב המכשיר.
פעולות בהתאמה אישית
אתם יכולים להתאים אישית את לוח הבקרה כדי להוסיף עוד לחצנים שיאפשרו למכשיר הווירטואלי לדמות את המכשיר הפיזי בצורה מדויקת יותר. האפשרות הזו שימושית לבדיקת תכונות ייחודיות למכשיר, כמו כפתור פיזי או תנועה מיוחדת שמפעילה פעולה ייחודית במערכת ההפעלה. אפשר גם להשתמש בלחצנים מותאמים אישית כדי להפעיל בדיקות של תכונות שמתמקדות יותר בבקרת איכות, כמו ההתנהגות של מערכת ההפעלה כשהסוללה של המכשיר חלשה.
לוח הבקרה שמוגדר כברירת מחדל ב-Cuttlefish כולל תמיכה ב'חיבור' של פעולות מותאמות אישית בלי שצריך לשנות את פרויקט ה-AOSP הראשי של Cuttlefish. כדי להתחיל להשתמש בפעולות מותאמות אישית, המכשיר הווירטואלי צריך לכלול רק קובץ הגדרה מינימלי. דוגמה לקובץ הגדרות של פעולה בהתאמה אישית
יוצרים קובץ JSON שמגדיר את הפעולות המותאמות אישית של המכשיר. אפשר לשים את הקובץ הזה בכל ספרייה שבבעלותכם. המבנה של הקובץ הזה מתואר בקטעים ADB shell וAction server.
יוצרים מודול
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", }כדי להגדיר את חבילת המארח של המכשיר הווירטואלי כך שתכלול את קובץ ההגדרות של הפעולה המותאמת אישית, צריך להגדיר משתני build של Soong 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 shell
- שרת פעולות
בקובץ ההגדרות בפורמט JSON אפשר להגדיר כמה מקרים של כל סוג הטמעה.
פקודת ADB shell
אפשר להגדיר לחצן אחד שמוטמע על ידי הפעלת פקודה אחת של 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
כל קובץ בינארי של מארח שרת פעולות צריך לבצע את השלבים הבאים:
מקבלים מספר של מתאר קובץ של שקע כארגומנט הראשון והיחיד של התוכנית.
הסוקט הזה נוצר על ידי
launch_cvdבאמצעותsocketpairעם הדומייןAF_LOCAL, הסוגSOCK_STREAMוהפרוטוקול 0.בלולאה, מנסים לקרוא 128 בייטים מהסוקט. הבייטים האלה מכילים אירועים של לחיצה על לחצן שנשלחים על ידי לקוח WebRTC בפורמט
command:state. commandהוא הערך שמופיע בהגדרת ה-JSON, ו-stateהוא מצב הלחיצה על הלחצן (downאוup).מבצעים פעולה על האירועים הנכנסים כדי לדמות את הפעולה המותאמת אישית.