Cuttlefish 的預設 WebRTC 瀏覽器介麵包含控制台 ,提供更多與虛擬裝置互動的方式。
控制台提供可模擬常見實體裝置的預設按鈕 動作 (例如電源鍵或音量按鈕),以及裝置旋轉。
自訂動作
您可以在控制台中自訂更多按鈕,讓虛擬的 更緊密地模擬實體裝置。這在測試時相當實用 裝置特有的功能,例如硬體按鈕或特殊手勢 ,在 OS 中觸發不重複動作。您也可以使用自訂按鈕 可用來測試更多主打品質的功能,例如作業系統的行為模式 裝置電量過低。
預設的 Cuttlefish 控制台支援「插入」功能自訂 且不必修改主要 Cuttlefish AOSP 專案。您的 虛擬裝置只需包含最基本的設定檔,就能開始使用 自訂動作查看 自訂動作設定檔範例。
建立可定義裝置自訂動作的 JSON 檔案。您可以 放在您擁有的目錄中這個檔案的結構說明 「ADB 殼層」和「動作伺服器」部分。
為 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 殼層指令
- 動作伺服器
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 會將事件轉送至動作伺服器,然後 動作伺服器會決定如何實作該動作
動作伺服器可提供更強大的控管機制,例如維護狀態 (例如 則為可切換事件) 或執行「meta-actions」例如關閉 目前的裝置、啟動更多裝置,或啟動錄製螢幕的瀏覽器 。應用方式有限,完全取決於你決定導入的項目 主機二進位檔。
下列 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
搭配網域建立AF_LOCAL
、類型SOCK_STREAM
和通訊協定 0。在迴圈中,嘗試從通訊端讀取 128 個位元組。這些位元組 包含 WebRTC 用戶端傳送的按鈕按下事件 (格式為
command:state
。command
為 JSON 設定中提供的值,state
是 按下按鈕狀態 (down
或up
)。對傳入事件採取行動,模擬自訂動作。