Bảng điều khiển con mực

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

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 tế 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 các nút khác cho phép thiết bị ảo mô phỏng thiết bị thực của bạn một cách chính xác hơn. Điều này rất hữu ích khi bạn kiểm thử các tính năng dành riêng cho 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ể sử dụng các nút tuỳ chỉnh để kiểm thử thêm các tính năng tập trung vào chất lượng đảm bảo chất lượng, 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 mặc định của Cuttlefish bao gồm tính năng hỗ trợ các thao tác tuỳ chỉnh "cắm vào" mà không cần sửa đổi dự án AOSP (Dự án nguồn mở Android) chính của Cuttlefish. Thiết bị ảo của bạn chỉ cần bao gồm 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 tệp cấu hình thao tác tuỳ chỉnh mẫu này.

  1. Tạo một tệp JSON xác định các thao tác tuỳ chỉnh trên thiết bị của bạn. 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 phần ADB shell (Giao diện dòng lệnh ADB) và Action server (Máy chủ hành động).

  2. Tạo mô-đun prebuilt_etc_host cho cấu hình JSON. Đảm bảo rằng sub_dir bằng 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 bao gồm tệp cấu hình thao tác tuỳ chỉnh.

    # 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 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 thực thể của từng hình thức 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 có thể 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 đó là:

  • shell_command: Lệnh thực thi trong adb shell khi 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 lấy từ https://material.io/resources/icons

Máy chủ hành động

Máy chủ hành động cho phép kiểm soát nhiều hơn đối với hành vi của hành động. Máy chủ hành động là tệp nhị phân lưu trữ theo dõi 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.

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ư cho một sự kiện có thể bật/tắt) hoặc thậm chí chạy "thao tác 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 một tiện ích trình duyệt quay màn hình. Các khả năng chỉ có thể bị giới hạn bởi những gì bạn quyết định triển khai bên trong tệp nhị phân của máy chủ lưu trữ.

Đoạn mã JSON sau đây xác định một máy chủ hành động theo dõi 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 của máy chủ lưu trữ
  • buttons: Một loạt các nút, với 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ủ lưu trữ hành động 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ố đầu tiên và duy nhất của chương trình.

    Cổng này do 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 như đượ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. Hành động trên các sự kiện đến để mô phỏng hành động tuỳ chỉnh.