一、命令行启动方式(python main.py …)
-
Worker 进程
• 原生 ADB 模拟器python main.py --mode worker --worker-type env --env-type android• Android World (gRPC)
python main.py --mode worker --worker-type env --env-type android_world -
全功能 API 服务器(Flask)
python main.py --mode api --env-type android # 或 android_world- 会自动启动:
CoordinatorEnvironmentWorkerRewardWorker- Flask HTTP Server(见下面「REST API 列表」)
- 会自动启动:
-
单机演示
python main.py --mode demo- 创建 Env / Reward Worker → 执行若干动作 → 打印奖励并清理。
二、REST API(Flask Server @ /api/**)
| 主题 | Method & Path | 说明 |
|---|---|---|
| Coordinator | GET /api/coordinator/status |
协调器状态 |
GET /api/coordinator/workers |
所有 Worker 概览 | |
| Worker 控制 | POST /api/workers/<id>/start|stop|restart |
启停指定 Worker |
GET /api/workers/<id>/status |
Worker 资源&健康 | |
PUT /api/workers/<id>/config |
更新 Worker 配置 | |
| Env 生命周期 | POST /api/env/create |
新建环境,返回 trajectory_id |
POST /api/env/save |
保存快照 | |
POST /api/env/load |
从快照恢复 | |
POST /api/env/remove |
删除环境+快照 | |
| Env 交互 | POST /api/env/step |
执行动作,返回 observation |
| Reward | POST /api/reward/calculate |
根据轨迹计算奖励 |
请求/响应均为 JSON,典型示例见下节。
三、动作指令格式(两类环境统一支持)
- 轻量 DSL(字符串)
click 120 350 swipe 100 800 100 300 # duration 默认 300ms text "Hello World" key back|home|enter|power screenshot - Android World
JSONAction(dict / JSON 字符串)android_world.env.json_action:
click·double_tap·long_press·input_text·navigate_home|back·keyboard_enter·scroll|swipe·open_app·wait等。
后端会先尝试解析成 JSONAction;若失败再按 DSL 处理,保证向后兼容。
四、REST 交互 Demo
-
新建环境
curl -X POST http://localhost:5000/api/env/create # => {"success":true,"trajectory_id":"1234-...","device_id":"emulator-5554"} -
执行动作(DSL & JSONAction 均可)
# DSL 示例 curl -X POST http://localhost:5000/api/env/step \ -H "Content-Type: application/json" \ -d '{"trajectory_id":"1234-...","command":"click 120 350"}' # JSONAction 示例 curl -X POST http://localhost:5000/api/env/step \ -H "Content-Type: application/json" \ -d '{ "trajectory_id":"1234-...", "command":{ "action_type":"input_text", "text":"Hello Android!" } }'
返回字段统一包含
{ "success": true, "observation": { "pixels": [...], // 屏幕 RGB 数组(简化后) "ui_elements": [...], // 已 dict 化的 UIElement 列表 "current_activity": "com.android.settings/.Settings", "screen_size": [1080, 2340], "orientation": 0 } } -
奖励计算
curl -X POST http://localhost:5000/api/reward/calculate \ -H "Content-Type: application/json" \ -d '{ "reward_type":"rule_based", "trajectory_id":"1234-...", "trajectory_data":{...} }'
{ "action_type": "click", "x": 120, "y": 350 }