Cuttlefish 的預設 WebRTC 瀏覽器介面包含控制面板,可透過更多方式與虛擬裝置互動。
控制面板提供預設按鈕,可模擬常見的實體裝置動作,例如電源按鈕或音量按鈕,以及裝置旋轉。
自訂操作
你可以自訂控制面板,新增更多按鈕,讓虛擬裝置更貼近實體裝置。這項功能有助於測試裝置專屬功能,例如硬體按鈕或特殊手勢,這些功能會在 OS 中觸發特殊動作。您也可以使用自訂按鈕,啟用以品質保證為主的測試功能,例如裝置電量不足時的 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 的按鈕按下事件。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。在迴圈中,嘗試從通訊端讀取 128 個位元組。這些位元組包含 WebRTC 用戶端傳送的按鈕按下事件,格式為
command:state
。command
是 JSON 設定中提供的內容,state
則是按鈕按下狀態 (down
或up
)。根據傳入的事件採取行動,模擬自訂動作。