Cuttlefish 的預設 WebRTC 瀏覽器介面包含控制台,可提供更多方式與虛擬裝置互動。
控制台提供預設按鈕,可模擬常見的實體裝置動作,例如電源按鈕或音量按鈕,以及裝置旋轉。
自訂操作
您可以自訂控制台,新增更多按鈕,讓虛擬裝置更貼近實體裝置。這項功能可用於測試裝置專屬的功能,例如硬體按鈕或特殊手勢,可在作業系統中觸發特定動作。您也可以使用自訂按鈕,測試更多以品質確保為重點的功能,例如裝置電量不足時的作業系統行為。
預設的 Cuttlefish 控制台支援「插入」自訂動作,無須修改主要 Cuttlefish AOSP 專案。虛擬裝置只需要包含最少的設定檔,即可開始使用自訂動作。請參閱這個自訂動作設定檔範例。
建立 JSON 檔案,定義裝置的自訂動作。您可以將這個檔案放在任何您擁有的目錄中。ADB shell 和 Action 伺服器部分說明瞭這個檔案的結構。
為 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 中的圖示名稱
動作伺服器
行動伺服器可讓您進一步控管動作的行為。動作伺服器是主機二進位檔,可使用 Socket 組合監聽 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
建立,其中網域為AF_LOCAL
,類型為SOCK_STREAM
,通訊協定為 0。在迴圈中,嘗試從 Socket 讀取 128 個位元組。這些位元組包含 WebRTC 用戶端以
command:state
格式傳送的按鈕按下事件。command
是 JSON 設定中提供的值,state
則是按鈕按下狀態 (down
或up
)。對傳入事件採取行動,模擬自訂動作。