Bảng điều khiển Cuttlefish

Giao diện trình duyệt WebRTC mặc định cho Cuttlefish có một bảng điều khiển cho phép bạn tương tác với thiết bị ảo theo nhiều cách hơn.

Bảng điều khiển có các nút mặc định để mô phỏng các thao tác phổ biến trên thiết bị thực, chẳng hạn như nút nguồn hoặc nút âm lượng, cũng như thao tác xoay thiết bị.

Thao tác tuỳ chỉnh

Bạn có thể tuỳ chỉnh bảng điều khiển để thêm nhiều nút hơn, giúp thiết bị ảo mô phỏng thiết bị thực một cách chính xác hơn. Điều này hữu ích cho việc kiểm thử các tính năng riêng biệt của thiết bị, chẳng hạn như nút phần cứng hoặc cử chỉ đặc biệt kích hoạt một thao tác riêng biệt trong hệ điều hành. Bạn cũng có thể dùng các nút tuỳ chỉnh để bật tính năng kiểm thử nhiều tính năng tập trung vào QA, chẳng hạn như hành vi của hệ điều hành khi thiết bị sắp hết pin.

Bảng điều khiển Cuttlefish mặc định có hỗ trợ "cắm" các thao tác tuỳ chỉnh mà không cần sửa đổi dự án AOSP Cuttlefish chính. Thiết bị ảo của bạn chỉ cần có một tệp cấu hình tối thiểu để bắt đầu sử dụng các thao tác tuỳ chỉnh. Xem ví dụ về tệp cấu hình thao tác tuỳ chỉnh này.

  1. Tạo một tệp JSON xác định các thao tác tuỳ chỉnh của thiết bị. Bạn có thể đặt tệp này vào bất kỳ thư mục nào mà bạn sở hữu. Cấu trúc của tệp này được mô tả trong các phần ADB shellAction server.

  2. Tạo một mô-đun prebuilt_etc_host cho cấu hình JSON của bạn. Đảm bảo rằng sub_dir bằng với 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. Đặt các biến bản dựng cấu hình Soong trong tệp makefile sản phẩm của thiết bị để định cấu hình gói máy chủ thiết bị ảo nhằm đưa tệp cấu hình thao tác tuỳ chỉnh của bạn vào.

    # 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
    

Có hai phương thức được hỗ trợ để triển khai một thao tác tuỳ chỉnh:

  • Lệnh shell ADB
  • Máy chủ hành động

Tệp cấu hình JSON có thể xác định nhiều phiên bản của từng loại triển khai.

Lệnh shell ADB

Bạn có thể xác định một nút duy nhất được triển khai bằng cách thực thi một lệnh adb shell duy nhất. Ví dụ: đoạn mã JSON sau đây xác định một nút duy nhất khởi chạy một trang web:

{
  "shell_command":"am start -a android.intent.action.VIEW -d https://www.android.com/",
  "button":{
      "command":"web",
      "title":"Web Page",
      "icon_name":"language"
  }
}

Các trường này là:

  • shell_command: Lệnh thực thi trong adb shell khi người dùng nhấn nút
  • button: Một đối tượng nút duy nhất có các trường con sau:
    • command: Tên riêng biệt cho nút này
    • title: Tiêu đề văn bản thay thế cho nút này
    • icon_name: Tên của một biểu tượng trong https://material.io/resources/icons

Máy chủ hành động

Máy chủ hành động cho phép bạn kiểm soát nhiều hơn đối với hành vi của các hành động. Máy chủ hành động là một tệp nhị phân máy chủ lưu trữ lắng nghe các sự kiện nhấn nút từ WebRTC bằng cách sử dụng một cặp ổ cắm. WebRTC chuyển tiếp các sự kiện đến máy chủ hành động, sau đó máy chủ hành động sẽ quyết định cách triển khai hành động.

Các máy chủ hành động cho phép kiểm soát mạnh mẽ hơn, chẳng hạn như duy trì trạng thái (chẳng hạn như đối với một sự kiện có thể chuyển đổi) hoặc thậm chí chạy "hành động meta" như tắt thiết bị hiện tại, khởi chạy nhiều thiết bị hơn hoặc bắt đầu tiện ích ghi màn hình của trình duyệt. Giới hạn duy nhất là những gì bạn quyết định triển khai bên trong tệp nhị phân máy chủ lưu trữ.

Đoạn mã JSON sau đây xác định một máy chủ hành động lắng nghe các sự kiện trên hai nút:

{
  "server":"cuttlefish_example_action_server",
  "buttons":[
    {
      "command":"settings",
      "title":"Quick Settings",
      "icon_name":"settings"
    },
    {
      "command":"alert",
      "title":"Do Not Disturb",
      "icon_name":"notifications_paused"
    }
  ]
}

Các trường này là:

  • server: Tên của mô-đun nhị phân máy chủ
  • buttons: Một mảng các nút, có cùng các trường con như trên

Sau khi cập nhật cấu hình JSON, hãy thêm tên của mô-đun máy chủ hành động vào biến bản dựng cấu hình Soong cvd_custom_action_servers. Ví dụ:

# 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

Mỗi tệp nhị phân máy chủ hành động lưu trữ phải thực hiện các bước sau:

  1. Chấp nhận số mô tả tệp ổ cắm làm đối số chương trình đầu tiên và duy nhất.

    Ổ cắm này được launch_cvd tạo bằng socketpair với miền AF_LOCAL, loại SOCK_STREAM và giao thức 0.

  2. Trong một vòng lặp, hãy cố gắng đọc 128 byte từ ổ cắm. Các byte này chứa các sự kiện nhấn nút do ứng dụng WebRTC gửi ở định dạng command:state. command được cung cấp trong cấu hình JSON và state là trạng thái nhấn nút (down hoặc up).

  3. Xử lý các sự kiện đến để mô phỏng thao tác tuỳ chỉnh.