Cuttlefish 的默认 WebRTC 浏览器界面包括一个控制面板,可以通过更多方式与虚拟设备进行交互。
控制面板具有默认按钮来模拟常见的物理设备操作,例如电源按钮或音量按钮,以及设备旋转。
自定义操作
您可以自定义控制面板以添加更多按钮,让您的虚拟设备更接近地模拟您的物理设备。这对于测试设备特有的功能很有用,例如硬件按钮或触发操作系统中独特操作的特殊手势。您还可以使用自定义按钮来测试更多以 QA 为重点的功能,例如设备电量不足时操作系统的行为。
默认的 Cuttlefish 控制面板支持“插入”自定义操作,而无需修改主 Cuttlefish AOSP 项目。您的虚拟设备只需包含一个最小配置文件即可开始使用自定义操作。请参阅此示例自定义操作配置文件。
创建定义设备自定义操作的 JSON 文件。您可以将此文件放在您拥有的任何目录中。此文件的结构在ADB shell和Action server部分中进行了描述。
为您的 JSON 配置创建一个
prebuilt_etc_host
模块。确保sub_dir
等于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", }
在设备的产品 makefile 中设置 Soong config 构建变量以配置虚拟设备主机包以包含您的自定义操作配置文件。
# 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
有两种支持的方法来实现自定义操作:
- ADB 外壳命令
- 动作服务器
您的 JSON 配置文件可以定义每种实现类型的多个实例。
ADB 外壳命令
您可以定义通过执行单个adb shell
命令实现的单个按钮。例如,以下 JSON 片段定义了一个启动网页的按钮:
{
"shell_command":"am start -a android.intent.action.VIEW -d https://www.android.com/",
"button":{
"command":"web",
"title":"Web Page",
"icon_name":"language"
}
}
这些字段是:
-
shell_command
:按下按钮时在adb shell
中执行的命令 button
:具有以下子字段的单个按钮对象:-
command
:此按钮的唯一名称 title
: 此按钮的替代文本标题icon_name
:来自https://material.io/resources/icons的图标名称
-
动作服务器
操作服务器允许对您的操作行为进行更多控制。动作服务器是一个主机二进制文件,它使用套接字对侦听来自 WebRTC 的按钮按下事件。 WebRTC 将事件转发到动作服务器,然后动作服务器决定如何实现动作。
动作服务器允许更强大的控制,例如维护状态(例如用于可切换事件)甚至运行“元操作”,例如杀死当前设备、启动更多设备或启动屏幕录制浏览器扩展。可能性仅受您决定在主机二进制文件中实现的内容的限制。
以下 JSON 片段定义了一个操作服务器,用于侦听两个按钮上的事件:
{
"server":"cuttlefish_example_action_server",
"buttons":[
{
"command":"settings",
"title":"Quick Settings",
"icon_name":"settings"
},
{
"command":"alert",
"title":"Do Not Disturb",
"icon_name":"notifications_paused"
}
]
}
这些字段是:
-
server
:主机二进制模块的名称 buttons
:按钮数组,具有与上面相同的子字段
更新 JSON 配置后,将操作服务器模块的名称附加到 Soong 配置构建变量cvd_custom_action_servers
。例如:
# 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
每个操作服务器主机二进制文件都应执行以下步骤:
接受套接字文件描述符编号作为第一个也是唯一的程序参数。
此套接字由
launch_cvd
使用带有域socketpair
、类型SOCK_STREAM
和协议 0 的AF_LOCAL
对创建。在一个循环中,尝试从套接字读取 128 个字节。这些字节包含 WebRTC 客户端以
command:state
格式发送的按钮按下事件。command
在 JSON 配置中提供,state
是按钮按下状态(down
或up
)。作用于传入事件以模拟自定义操作。