本页介绍了如何使用 REST API 或命令行界面控制 Cuttlefish 设备中的环境。例如,您可以修改 Cuttlefish 设备的 Wi-Fi 信号或更新其 GPS 位置。
服务
cvd env 命令提供以下控制 Cuttlefish 环境的服务:
| 服务 | 说明 | 
|---|---|
| GnssGrpcProxy | 控制 Cuttlefish 地理定位功能的 GNSS。 | 
| OpenwrtControlService | 控制 Openwrt,即用于 Cuttlefish Wi-Fi 功能的虚拟化 Wi-Fi AP 提供程序。 | 
| WmediumdService | 控制 Wmediumd,即用于 Cuttlefish Wi-Fi 功能的无线媒介模拟工具。 | 
| CasimirControlService | 控制 Casimir,即用于外部 NFC 设备的模拟工具。 | 
使用 REST API 控制环境
本部分介绍如何通过 <https://localhost:1443> 服务端点使用 REST API 控制环境。
列出可用的服务或方法
要获取所有服务的列表,请向以下网址发送 GET 请求(其中包含设备 ID)。
https://localhost:1443/devices/DEVICE_ID/services
要获取服务的所有方法的列表,请向以下网址发送 GET 请求(其中包含设备 ID 和服务名称)。
https://localhost:1443/devices/DEVICE_ID/services/SERVICE_NAME
要获取方法的详细信息(例如请求或响应消息类型),请向以下网址发送 GET 请求(其中包含设备 ID、服务名称和方法名称)。
https://localhost:1443/devices/DEVICE_ID/services/SERVICE_NAME/METHOD_NAME
详细了解请求和响应类型
如需获取请求或响应消息类型的详细信息,请向以下网址发送 GET 请求(其中包含设备 ID、服务名称,以及请求或响应消息类型)。这将输出消息中每个字段的所有名称和类型。然后,您可以根据此信息编写 JSON 格式的 proto 消息,用于发送 RPC 请求。
https://localhost:1443/devices/DEVICE_ID/services/SERVICE_NAME/REQUEST_OR_RESPONSE_TYPE_NAME/type
发送 RPC 请求以更改环境
如需使用 JSON 格式的 proto 发送 RPC 请求来调用某项服务的方法,请向以下网址发送 POST 请求(其中包含设备 ID、服务名称和方法名称)。JSON 格式的 proto 必须包含在正文中。
https://localhost:1443/devices/DEVICE_ID/services/SERVICE_NAME/METHOD_NAME
示例用例
以下是 REST API 的一个示例用例,该命令通过调用 SetTxpower 修改 Wi-Fi 信号强度。
- 确定用于修改 Wi-Fi 信号强度的服务名称、方法名称和请求消息类型名称。 - 向以下网址发送 - GET请求,以获取所有可用服务的列表。- https://localhost:1443/devices/cvd-1/services- 这是一个示例响应。 - {"services":["OpenwrtControlService","EchoService","GnssGrpcProxy","WmediumdService"]}
- 向以下网址发送 - GET请求,以获取- WmediumdService的方法列表。- https://localhost:1443/devices/cvd-1/services/WmediumdService- 这是一个示例响应。 - {"methods":["ListStations","LoadConfig","ReloadConfig","SetCivicloc","SetLci","SetPosition","SetSnr","SetTxpower","StartPcap","StopPcap"]}
- 向以下网址发送 - GET请求,获取- SetTxpower方法的请求和响应消息类型的信息。- https://localhost:1443/devices/cvd-1/services/WmediumdService/SetTxpower- 这是一个示例响应。 - {"request_type_name":"wmediumdserver.SetTxpowerRequest","response_type_name":"google.protobuf.Empty"}
 
- 向以下网址发送 - GET请求,以获取- wmediumdserver.SetTxpowerRequest请求消息类型的详细信息。- https://localhost:1443/devices/cvd-1/services/WmediumdService/wmediumdserver.SetTxpowerRequest/type- 这是一个示例响应。 - message SetTxpowerRequest { string mac_address = 1; int32 tx_power = 2; }
- 通过向此网址发送正文如下的 - POST请求来向- WmediumdService服务发送 RPC 请求,以将 Wi-Fi 信号强度修改为所需的级别。- https://localhost:1443/devices/cvd-1/services/WmediumdService/SetTxpower- {"mac_address":"42:00:00:00:00:00", "tx_power":1}- 这是一个示例响应。 - {}
使用命令行控制环境
本部分介绍了 cvd env CLI 命令可用的子命令。如需了解更多详情,请使用 cvd help env 输出帮助消息。
列出可用的服务或方法
要获取所有服务的列表,请使用不带任何参数的 cvd env ls。
cvd env ls要获取服务的所有方法的列表,请将服务的名称添加为参数。
cvd env ls SERVICE_NAME要获取详细信息(例如某方法的请求或响应消息类型),请添加服务名称和方法名称。
cvd env ls SERVICE_NAME METHOD_NAME详细了解请求和响应类型
如需获取请求或响应消息类型的详细信息,请使用 cvd env type 命令。此命令会输出消息中每个字段的所有名称和类型。然后,您可以根据此信息编写 JSON 格式的 proto 消息,用于发送 RPC 请求。
cvd env type SERVICE_NAME REQUEST_OR_RESPONSE_TYPE_NAME发送 RPC 请求以更改环境
如需使用 JSON 格式的 proto 发送 RPC 请求来调用某项服务的方法,请使用 cvd enc call 命令。当 RPC 请求终止时,界面会输出消息 Rpc succeeded with OK status 和一条包含值的响应消息(如有)。
cvd env call SERVICE_NAME METHOD_NAME JSON_FORMATTED_PROTO示例用例
以下是 cvd env CLI 命令的一个示例用例,该命令通过调用 SetTxpower 修改 Wi-Fi 信号强度。
- 确定用于修改 Wi-Fi 信号强度的服务名称、方法名称和请求消息类型名称。 - 获取所有可用服务的列表。 - cvd env ls (Omitted) { "services" : [ "OpenwrtControlService", "EchoService", "GnssGrpcProxy", "WmediumdService" ] }- 获取 - WmediumdService的方法列表。- cvd env ls WmediumdService (Omitted) { "methods" : [ "ListStations", "LoadConfig", "ReloadConfig", "SetCivicloc", "SetLci", "SetPosition", "SetSnr", "SetTxpower", "StartPcap", "StopPcap" ] }- 获取 - SetTxpower方法的请求和响应消息类型的信息。- cvd env ls WmediumdService SetTxpower (Omitted) { "request_type" : "wmediumdserver.SetTxpowerRequest", "response_type" : "google.protobuf.Empty" }
- 获取 - wmediumdserver.SetTxpowerRequest请求消息类型的详细信息。- cvd env type WmediumdService wmediumdserver.SetTxpowerRequest (Omitted) message SetTxpowerRequest { string mac_address = 1; int32 tx_power = 2; }
- 向 - WmediumdService服务发送 RPC 请求,以将 Wi-Fi 信号强度修改为所需的级别。- cvd env call WmediumdService SetTxpower "{mac_address:'42:00:00:00:00:00', tx_power:1}" (Omitted) Rpc succeeded with OK status {}
