Cuttlefish 的預設 WebRTC 瀏覽器介麵包括一個控制面板,可提供更多與虛擬裝置互動的方式。
控制面板具有預設按鈕來模擬常見的實體設備操作,例如電源按鈕或音量按鈕以及設備旋轉。
自訂操作
您可以自訂控制面板以添加更多按鈕,使您的虛擬設備能夠更緊密地模擬您的實體設備。這對於測試設備獨有的功能非常有用,例如硬體按鈕或觸發作業系統中獨特操作的特殊手勢。您也可以使用自訂按鈕來測試更多以 QA 為中心的功能,例如裝置電池電量不足時作業系統的行為。
預設的 Cuttlefish 控制面板支援「插入」自訂操作,無需修改主 Cuttlefish AOSP 專案。您的虛擬設備只需要包含一個最小的設定檔即可開始使用自訂操作。請參閱此範例自訂操作設定檔。
建立一個定義設備的自訂操作的 JSON 檔案。您可以將此文件放在您擁有的任何目錄中。 ADB shell和操作伺服器部分描述了該檔案的結構。
為您的 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 配置建置變量,以配置虛擬設備主機包以包含您的自訂操作設定檔。
# 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 設定後,將操作伺服器模組的名稱附加到 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
使用帶有域AF_LOCAL
、類型SOCK_STREAM
和協定 0 的socketpair
對建立。在循環中,嘗試從套接字讀取 128 個位元組。這些位元組包含 WebRTC 用戶端以
command:state
格式傳送的按鈕按下事件。command
是 JSON 配置中提供的,state
是按鈕按下狀態(down
或up
)。對傳入事件進行操作以模擬自訂操作。