Cuttlefish 的默認 WebRTC 瀏覽器界麵包括一個控制面板,可以通過更多方式與虛擬設備進行交互。
控制面板具有默認按鈕來模擬常見的物理設備操作,例如電源按鈕或音量按鈕,以及設備旋轉。
自定義操作
您可以自定義控制面板以添加更多按鈕,讓您的虛擬設備更接近地模擬您的物理設備。這對於測試設備特有的功能很有用,例如硬件按鈕或觸發操作系統中獨特操作的特殊手勢。您還可以使用自定義按鈕來測試更多以 QA 為重點的功能,例如設備電量不足時操作系統的行為。
默認的 Cuttlefish 控制面板支持“插入”自定義操作,而無需修改主 Cuttlefish AOSP 項目。您的虛擬設備只需包含一個最小配置文件即可開始使用自定義操作。請參閱此示例自定義操作配置文件。
創建定義設備自定義操作的 JSON 文件。您可以將此文件放在您擁有的任何目錄中。此文件的結構在ADB shell和Action server部分中進行了描述。
為您的 JSON 配置創建一個
prebuilt_etc_host
模塊。確保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", }
在設備的產品 makefile 中設置 Soong config 構建變量以配置虛擬設備主機包以包含您的自定義操作配置文件。
# 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 配置後,將操作服務器模塊的名稱附加到 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
、類型SOCK_STREAM
和協議 0 的AF_LOCAL
對創建。在一個循環中,嘗試從套接字讀取 128 個字節。這些字節包含 WebRTC 客戶端以
command:state
格式發送的按鈕按下事件。command
在 JSON 配置中提供,state
是按鈕按下狀態(down
或up
)。作用於傳入事件以模擬自定義操作。