Cuttlefish 控制台

Cuttlefish 的預設 WebRTC 瀏覽器介麵包含控制台 ,提供更多與虛擬裝置互動的方式。

控制台提供可模擬常見實體裝置的預設按鈕 動作 (例如電源鍵或音量按鈕),以及裝置旋轉。

自訂動作

您可以在控制台中自訂更多按鈕,讓虛擬的 更緊密地模擬實體裝置。這在測試時相當實用 裝置特有的功能,例如硬體按鈕或特殊手勢 ,在 OS 中觸發不重複動作。您也可以使用自訂按鈕 可用來測試更多主打品質的功能,例如作業系統的行為模式 裝置電量過低。

預設的 Cuttlefish 控制台支援「插入」功能自訂 且不必修改主要 Cuttlefish AOSP 專案。您的 虛擬裝置只需包含最基本的設定檔,就能開始使用 自訂動作查看 自訂動作設定檔範例

  1. 建立可定義裝置自訂動作的 JSON 檔案。您可以 放在您擁有的目錄中這個檔案的結構說明 「ADB 殼層」和「動作伺服器」部分。

  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 殼層指令
  • 動作伺服器

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 會將事件轉送至動作伺服器,然後 動作伺服器會決定如何實作該動作

動作伺服器可提供更強大的控管機制,例如維護狀態 (例如 則為可切換事件) 或執行「meta-actions」例如關閉 目前的裝置、啟動更多裝置,或啟動錄製螢幕的瀏覽器 。應用方式有限,完全取決於你決定導入的項目 主機二進位檔。

下列 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 搭配網域建立 AF_LOCAL、類型 SOCK_STREAM 和通訊協定 0。

  2. 在迴圈中,嘗試從通訊端讀取 128 個位元組。這些位元組 包含 WebRTC 用戶端傳送的按鈕按下事件 (格式為 command:statecommand 為 JSON 設定中提供的值,state 是 按下按鈕狀態 (downup)。

  3. 對傳入事件採取行動,模擬自訂動作。

,瞭解如何調查及移除這項存取權。