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