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

Giao diện trình duyệt WebRTC mặc định cho Cuttlefish bao gồm 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 vật lý thông thường của thiết bị như nút nguồn hoặc nút âm lượng cũng như xoay thiết bị.

Hành động tùy chỉnh

Bạn có thể tùy chỉnh bảng điều khiển để thêm nhiều nút hơn cho phép thiết bị ảo mô phỏng chặt chẽ hơn thiết bị vật lý của bạn. Điều này hữu ích để kiểm tra 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ĐH. Bạn cũng có thể sử dụng các nút tùy chỉnh để cho phép thử nghiệm nhiều tính năng tập trung vào QA hơn, chẳng hạn như hoạt động của hệ điều hành khi thiết bị sắp hết pin.

Bảng điều khiển Mực nang mặc định bao gồm hỗ trợ "cắm" các hành động tùy chỉnh mà không cần sửa đổi dự án AOSP Mực nang chính . 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 hành động tùy chỉnh. Xem ví dụ này về tệp cấu hình hành động tùy chỉnh .

  1. Tạo tệp JSON xác định hành động tùy chỉnh của thiết bị của bạn. Bạn có thể đặt tập tin này vào 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 phần máy chủ hành động và trình bao ADB .

  2. Tạo mô-đun prebuilt_etc_host cho cấu hình JSON của bạn. Đả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 xây dựng cấu hình Soong trong tệp tạo sản phẩm của thiết bị của bạn để định cấu hình gói máy chủ thiết bị ảo nhằm bao gồm tệp cấu hình hành động tùy chỉnh 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ó hai phương pháp được hỗ trợ để triển khai hành động tùy chỉnh:

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

Tệp cấu hình JSON của bạn 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 . 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 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 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 biểu tượng 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 hành vi hành động của bạn. Máy chủ hành động là một máy chủ nhị phân lắng nghe 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 các sự kiện đến máy chủ hành động và sau đó máy chủ hành động 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ư đối với một sự kiện có thể chuyển đổi) hoặc thậm chí chạy "siêu hành động" như tắt thiết bị hiện tại, khởi chạy thêm thiết bị hoặc bắt đầu tiện ích mở rộng trình duyệt ghi màn hình. Các 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 hệ nhị phân máy chủ.

Đoạn 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 là:

  • server : Tên của mô-đun nhị phân máy chủ của bạn
  • buttons : Một mảng các nút, có cùng 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 xây 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 nên 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 tạo bởi launch_cvd bằng cách sử dụng socketpair có miền AF_LOCAL , nhập SOCK_STREAM và giao thức 0.

  2. Trong một vòng lặp, hãy thử đọc 128 byte từ socket. Các byte này chứa các sự kiện nhấn nút được máy khách WebRTC gửi theo đị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 dựa trên các sự kiện sắp tới để mô phỏng hành động tùy chỉnh.