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 中的圖示名稱
動作伺服器
行動伺服器可讓您進一步控管動作的行為。動作伺服器是主機二進位檔,可使用 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
使用,網域為AF_LOCAL
、類型SOCK_STREAM
和通訊協定 0 的socketpair
所建立。在迴圈中,嘗試從通訊端讀取 128 個位元組。這些位元組包含 WebRTC 用戶端以
command:state
格式傳送的按鈕按下事件。command
是 JSON 設定中提供的值,state
則是按鈕按下狀態 (down
或up
)。根據收到的事件採取行動,模擬自訂動作。