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