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

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

Bảng điều khiển có các nút mặc định để mô phỏng thiết bị thực thông dụng các thao tác như nút nguồn hoặc nút âm lượng, cũng như 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 để mô phỏng gần giống thiết bị thực của bạn hơn. Điều này rất hữu ích khi kiểm thử các tính năng dành riêng cho thiết bị của bạn, chẳng hạn như nút phần cứng hoặc cử chỉ đặc biệt kích hoạt một hành động duy nhất trong hệ điều hành. Bạn cũng có thể dùng các nút tuỳ chỉnh để cho phép thử nghiệm các tính năng tập trung vào đảm bảo chất lượng hơn, 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 con nhộng có tính năng hỗ trợ "cắm" tùy chỉnh hành động mà không cần sửa đổi dự án AOSP chính của Cuttlefish. Thông tin thiết bị ảo chỉ cần bao gồm một tệp cấu hình tối thiểu để bắt đầu sử dụng thao tác tuỳ chỉnh. Xem ví dụ về tệp cấu hình thao tác tuỳ chỉnh.

  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 trong bất kỳ thư mục nào bạn sở hữu. Cấu trúc của tệp này được mô tả trong các mục ADB shellAction server.

  2. Tạo một 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 của sản phẩm của thiết bị thành định cấu hình gói lưu trữ thiết bị ảo để đưa hành động tuỳ chỉnh vào config của bạn.

    # 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ó 2 phương thức được hỗ trợ để triển khai một thao tác tuỳ chỉnh:

  • Lệnh ADB shell
  • 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 mỗi loại trong quá trình triển khai.

Lệnh ADB shell

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 đó là:

  • shell_command: Lệnh thực thi trong adb shell khi nút này là đã nhấn
  • button: Một đối tượng nút đơn có các trường con sau:
    • command: Tên duy nhấ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 kiểm soát nhiều hơn đối với hành vi của hành động. Một hành động máy chủ 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 cặp ổ cắm. WebRTC chuyển tiếp 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 "hành động meta" chẳng hạn như giết thiết bị hiện tại, chạy thêm thiết bị khác hoặc bắt đầu trình duyệt ghi màn hình tiện ích. Khả năng chỉ 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ủ.

Đoạn mã JSON sau đây xác định một máy chủ hành động có nhiệm vụ theo dõi các sự kiện trên 2 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 đó 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 của máy chủ 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 chương trình đầu tiên và duy nhất đối số.

    Cổng này do launch_cvd tạo bằng socketpair với miền AF_LOCAL, nhập SOCK_STREAM và giao thức 0.

  2. Trong một vòng lặp, hãy cố đọ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, còn state là trạng thái nhấn nút (down hoặc up).

  3. Hành động theo các sự kiện sắp tới để mô phỏng thao tác tuỳ chỉnh.