ממשק הדפדפן של 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 יכול להגדיר מספר מופעים לכל סוג של הטמעה.
פקודת מעטפת 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 config 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
).פועלים בהתאם לאירועים הנכנסים כדי לדמות את הפעולה המותאמת אישית.