墨魚控制面板

Cuttlefish 的默認 WebRTC 瀏覽器界麵包括一個控制面板,可以通過更多方式與虛擬設備進行交互。

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

自定義操作

您可以自定義控制面板以添加更多按鈕,讓您的虛擬設備更接近地模擬您的物理設備。這對於測試設備特有的功能很有用,例如硬件按鈕或觸發操作系統中獨特操作的特殊手勢。您還可以使用自定義按鈕來測試更多以 QA 為重點的功能,例如設備電量不足時操作系統的行為。

默認的 Cuttlefish 控制面板支持“插入”自定義操作,而無需修改主 Cuttlefish AOSP 項目。您的虛擬設備只需包含一個最小配置文件即可開始使用自定義操作。請參閱此示例自定義操作配置文件

  1. 創建定義設備自定義操作的 JSON 文件。您可以將此文件放在您擁有的任何目錄中。此文件的結構在ADB shellAction server部分中進行了描述。

  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 config 構建變量以配置虛擬設備主機包以包含您的自定義操作配置文件。

    # 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 :具有以下子字段的單個按鈕對象:

動作服務器

操作服務器允許對您的操作行為進行更多控制。動作服務器是一個主機二進製文件,它使用套接字對偵聽來自 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使用帶有域socketpair 、類型SOCK_STREAM和協議 0 的AF_LOCAL對創建。

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

  3. 作用於傳入事件以模擬自定義操作。