墨魚控制面板

Cuttlefish 的預設 WebRTC 瀏覽器介麵包括一個控制面板,可提供更多與虛擬裝置互動的方式。

控制面板具有預設按鈕來模擬常見的實體設備操作,例如電源按鈕或音量按鈕以及設備旋轉。

自訂操作

您可以自訂控制面板以添加更多按鈕,使您的虛擬設備能夠更緊密地模擬您的實體設備。這對於測試設備獨有的功能非常有用,例如硬體按鈕或觸發作業系統中獨特操作的特殊手勢。您也可以使用自訂按鈕來測試更多以 QA 為中心的功能,例如裝置電池電量不足時作業系統的行為。

預設的 Cuttlefish 控制面板支援「插入」自訂操作,無需修改主 Cuttlefish AOSP 專案。您的虛擬設備只需要包含一個最小的設定檔即可開始使用自訂操作。請參閱此範例自訂操作設定檔

  1. 建立一個定義設備的自訂操作的 JSON 檔案。您可以將此文件放在您擁有的任何目錄中。 ADB shell操作伺服器部分描述了該檔案的結構。

  2. 為您的 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",
    }
    
  3. 在設備的產品 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 :具有以下子欄位的單一按鈕物件:

動作伺服器

操作伺服器可以更好地控制您的操作行為。操作伺服器是一個主機二進位文件,它使用套接字對偵聽來自 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

每個操作伺服器主機二進位檔案應執行下列步驟:

  1. 接受套接字檔案描述符編號作為第一個也是唯一的程式參數。

    此套接字由launch_cvd使用帶有域AF_LOCAL 、類型SOCK_STREAM和協定 0 的socketpair對建立。

  2. 在循環中,嘗試從套接字讀取 128 個位元組。這些位元組包含 WebRTC 用戶端以command:state格式傳送的按鈕按下事件。 command是 JSON 配置中提供的, state是按鈕按下狀態( downup )。

  3. 對傳入事件進行操作以模擬自訂操作。