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ế, 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 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 hữu ích cho việc 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 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 để bật tính năng kiểm thử nhiều tính năng tập trung vào QA 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 Cuttlefish mặc định 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 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.
Tạo 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 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).
Tạo mô-đun
prebuilt_etc_host
cho cấu hình JSON. Đảm bảo rằngsub_dir
bằngcvd_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", }
Đặ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 mỗi 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 trongadb shell
khi nhấn nútbutton
: 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àytitle
: Tiêu đề văn bản thay thế cho nút nàyicon_name
: Tên của một biểu tượng trên 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 hành vi của các hành động tốt hơn. Máy chủ hành động là tệp nhị phân lưu trữ 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.
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" 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ỉ 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 mô-đun nhị phân của máy chủ lưu trữbuttons
: Một mảng các nút, có cùng các trường phụ 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:
Chấp nhận số chỉ số mô tả tệp ổ cắm làm đối số chương trình đầu tiên và duy nhất.
launch_cvd
tạo ổ cắm này bằng cách sử dụngsocketpair
với miềnAF_LOCAL
, loạiSOCK_STREAM
và giao thức 0.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ặcup
).Hành động trên các sự kiện đến để mô phỏng hành động tuỳ chỉnh.