如果你在用 MuMu 模拟器 做自动化测试、批量运维或脚本编排,大概率会碰到同一个问题:命令行好用,但不好集成。每次操作都要手动执行 MuMuManager.exe,难以被其他系统调用,也不方便做并发控制和统一错误处理。
MuMu模拟器 API(mumu-api)正是为此而生——它是一个基于 FastAPI 的轻量 Web 服务,把 MuMu 官方命令行工具封装成 REST 接口。你只需要发 HTTP 请求,就能远程启动/关闭模拟器、管理应用、查询设备状态。
当前已提供以下能力:
类别 | 接口示例 | 说明 |
|---|---|---|
模拟器控制 | POST /launch/{index} | 启动指定模拟器 |
POST /restart/{index} | 重启 | |
POST /shutdown/{index} | 关闭 | |
应用管理 | POST /app/launch/{index}/{package_name} | 启动应用 |
POST /app/close/{index}/{package_name} | 关闭应用 | |
GET /app/list/{index} | 获取已安装应用列表 | |
设备信息 | GET /device/{index} | 查询设备状态(支持 all 查询全部) |
其中 {index} 是模拟器编号,与 MuMu 客户端中显示的序号一致。
1. 开箱即用的 HTTP 集成
不需要在每个脚本里拼接命令行参数,任何支持 HTTP 的语言或工具(Python、Node.js、Postman、CI 流水线等)都可以直接调用。docs/local.http 里附带了常用请求示例,复制即可调试。
2. 为自动化场景做了基础防护
3. 异步架构,不阻塞主线程
底层通过 asyncio 异步调用子进程,适合同时管理多台模拟器的场景。
4. 清晰的分层设计,扩展成本低
HTTP 请求 → API 路由 → 中间件(限流/互斥) → 命令层 → MuMuManager.exe命令层按 MuMu 子命令分类组织(control、info、adb 等),新增能力通常只需两步:在 src/commands/ 下封装命令,再在 src/apis/ 下暴露路由。
5. 配置灵活
通过 YAML 配置文件管理端口、日志、MuMu 路径等参数,开发环境和生产环境可分别加载不同配置。
编辑 src/config/settings.yaml(或开发环境的 settings.development.yaml):
mumu:
path: MuMuManager.exe 的完整路径
share_base_dir: MuMu 共享文件夹目录开发环境:
uv sync
uv run python -m src.main生产环境可直接使用项目根目录的 start.bat 一键启动。
服务默认监听 9090 端口。启动后访问 http://localhost:9090/docs 可查看 Swagger 交互文档。
# 启动 1 号模拟器
POST http://localhost:9090/launch/1
# 查询所有设备状态
GET http://localhost:9090/device/all
# 启动指定应用
POST http://localhost:9090/app/launch/1/com.example.app项目的设计目标之一就是按需扩展,而不是一次性塞满所有功能。
以添加「模拟点击」为例,MuMu 命令行已支持 adb 子命令,项目中 src/commands/adb.py 也已有 tap、input 等方法的基础封装,你只需要:
src/apis/ 下新增路由,调用 adb_cmd.tap(index, x, y);
@mutex_by_index 等中间件;
同理,截图(control_cmd.screenshot)、进程检测(adb_cmd.process_exists)等能力都可以按同样模式快速暴露为 API。
这种「命令层先行、API 按需开放」的方式,让项目既能保持精简,又能随业务需求灵活生长。
MuMu 模拟器 API 不是对 MuMu 功能的重新实现,而是对官方命令行工具的一层薄封装。它的价值在于降低集成门槛——把已有的命令行能力变成标准 HTTP 接口,并附带限流、互斥、重试等自动化场景常见的基础保障。
项目采用 MIT 协议开源,欢迎 Star、Issue 和 Pull Request。
GitHub:mumu-api