1. DroidRun 是什么?它能做什么?
DroidRun 是一个基于 LLM(大语言模型)的 Android 设备自动化控制框架。它允许开发者通过自然语言指令来控制 Android 设备,实现各种自动化操作。想象一下,你只需要告诉它"打开微信,找到张三的聊天窗口,发送'晚上一起吃饭'",它就能自动完成这一系列操作。
这个框架特别适合以下场景:
- 自动化测试:不需要编写复杂的测试脚本,用自然语言描述测试用例即可
- 老年人辅助:不熟悉智能手机操作的用户可以通过语音或文字指令控制手机
- 批量操作:需要在多台设备上执行相同操作时,可以大幅提高效率
我最近在一个跨平台自动化测试项目中使用了 DroidRun,相比传统自动化工具,它最大的优势是不需要学习特定的脚本语言,团队成员可以快速上手。
2. MacOS 环境准备
2.1 安装 Android 平台工具
在 MacOS 上,我们需要先安装 Android 调试桥(ADB)工具。这是与 Android 设备通信的基础。推荐使用 Homebrew 安装:
bash复制brew install android-platform-tools
安装完成后,验证是否成功:
bash复制adb version
你应该能看到类似这样的输出:
code复制Android Debug Bridge version 1.0.41
Version 35.0.2-12147458
Installed as /opt/homebrew/bin/adb
注意:如果你之前安装过 Android Studio,可能已经自带了 ADB。这种情况下,建议统一使用 Homebrew 管理的版本,避免版本冲突。
2.2 配置 USB 调试
要让 Mac 能够识别 Android 设备,需要在手机上开启开发者选项和 USB 调试:
- 进入手机设置 > 关于手机
- 连续点击"版本号"7次,直到看到"您现在是开发者"的提示
- 返回设置,进入"系统和更新" > "开发者选项"
- 开启"USB 调试"和"安装 via USB"选项
连接手机到 Mac 后,在终端运行:
bash复制adb devices
你应该能看到设备列表。如果显示"未授权",需要在手机上弹出的对话框中允许调试。
3. Android 设备配置
3.1 安装 DroidRun Portal 应用
DroidRun 需要一个辅助应用运行在 Android 设备上。你可以从官方仓库下载最新版的 APK:
bash复制wget https://github.com/droidrun/droidrun-portal/releases/download/v0.1.0/droidrun-portal-v0.1.0.apk
然后安装到设备:
bash复制adb install droidrun-portal-v0.1.0.apk
如果你使用的是 Android 模拟器,安装命令略有不同:
bash复制adb -s emulator-5554 install droidrun-portal-v0.1.0.apk
3.2 配置 API 密钥
DroidRun 需要使用大语言模型来处理自然语言指令。目前支持 OpenAI 的 GPT 系列模型。你需要:
- 获取 OpenAI API 密钥
- 在项目根目录创建 .env 文件,内容如下:
code复制OPENAI_API_KEY=你的API密钥
或者直接设置环境变量:
bash复制export OPENAI_API_KEY='你的API密钥'
安全提示:不要将 API 密钥直接提交到版本控制系统。建议使用 .env 文件并添加到 .gitignore
4. 基本使用指南
4.1 运行第一个命令
让我们从一个简单的命令开始:
bash复制droidrun "打开设置" --provider openai --model gpt-4.1-mini
这个命令会:
- 将自然语言指令发送给 LLM
- LLM 解析出需要执行的操作步骤
- 通过 ADB 在连接的 Android 设备上执行这些操作
你应该能看到手机自动打开了系统设置界面。
4.2 复杂任务示例
DroidRun 真正的强大之处在于处理多步操作。例如:
bash复制droidrun "打开Chrome,访问 www.baidu.com,然后搜索 Weather" --provider openai --model gpt-4o
这个命令会依次执行:
- 启动 Chrome 浏览器
- 在地址栏输入 www.baidu.com 并访问
- 在搜索框输入"Weather"并搜索
我在实际项目中用类似的命令实现了自动化测试流程,比传统方法节省了约70%的脚本编写时间。
5. 高级配置与优化
5.1 使用不同的模型提供商
除了 OpenAI,DroidRun 还支持其他 LLM 提供商。例如使用本地部署的模型:
bash复制droidrun "查看未读消息" --provider local --model http://localhost:5000/v1
需要在本地运行兼容 OpenAI API 的模型服务,如 llama.cpp 或 text-generation-webui。
5.2 设备选择
当连接了多个设备时,可以指定目标设备:
bash复制droidrun "打开相机" --device emulator-5554
先用 adb devices 查看设备ID。
5.3 超时设置
某些操作可能需要更长时间,可以调整超时:
bash复制droidrun "下载并安装微信" --timeout 120
单位为秒,默认是30秒。
6. 常见问题排查
6.1 ADB 设备未识别
如果 adb devices 没有显示你的设备,尝试:
- 重新插拔 USB 线
- 更换 USB 端口
- 检查手机是否弹出"允许USB调试"的提示
- 重启 adb 服务:
bash复制
adb kill-server adb start-server
6.2 操作执行失败
如果命令执行不完整或出错,可以:
- 增加 --verbose 参数查看详细日志
- 拆解复杂命令为多个简单命令
- 检查手机屏幕是否锁定(需要先解锁)
- 确认 DroidRun Portal 应用正在运行
6.3 API 调用限制
免费版的 OpenAI API 有调用频率限制。如果遇到限流:
- 考虑升级到付费计划
- 降低请求频率
- 使用更小的模型(如 gpt-3.5-turbo)
7. 实际应用案例分享
7.1 自动化测试套件
在我的一个电商App测试项目中,我们使用 DroidRun 编写了这样的测试流程:
bash复制droidrun "打开App,登录测试账号,搜索'智能手机',选择第一个商品,加入购物车,进入购物车结算页面" --timeout 60
相比传统的 UI 自动化测试脚本,这种方式的维护成本低很多,特别是当 UI 布局变化时,只需要调整自然语言描述即可。
7.2 老年人手机助手
为不熟悉智能手机的父母设置了一套常用指令:
bash复制droidrun "给儿子发微信说'今晚回家吃饭吗?'"
droidrun "打开相册,找到最近拍的照片,设为壁纸"
把这些命令做成快捷方式,父母只需要点击就能完成复杂操作。
8. 性能优化建议
8.1 指令优化技巧
- 尽量使用明确的名称:"设置"比"那个齿轮图标的App"更好
- 按步骤拆分复杂操作
- 指定具体位置:"点击右上角的搜索图标"比"点击搜索"更可靠
- 添加等待条件:"等待加载完成后点击登录"
8.2 模型选择策略
根据任务复杂度选择模型:
- 简单任务:gpt-3.5-turbo(成本低)
- 中等复杂度:gpt-4.1-mini(平衡成本与性能)
- 复杂任务:gpt-4o(理解能力最强)
8.3 缓存常用指令
对于频繁使用的指令,可以预先生成操作序列并缓存,避免每次都要请求LLM。
9. 安全注意事项
- 不要在不安全的网络环境下使用
- 定期轮换 API 密钥
- 限制 ADB 调试权限,不用时关闭
- 审查自动执行的操作,特别是涉及敏感数据的
- 考虑在测试专用设备上使用,而非日常主力机
我在项目中就遇到过因为指令不明确,DroidRun 误删了重要文件的情况。现在我们会先在测试设备上验证新指令。
10. 与其他工具的对比
10.1 与传统自动化工具对比
| 特性 | DroidRun | Appium/UIAutomator |
|---|---|---|
| 学习曲线 | 低 | 高 |
| 维护成本 | 低 | 高 |
| 执行速度 | 中等 | 快 |
| 灵活性 | 高 | 中等 |
| 设备兼容性 | 依赖ADB | 广泛支持 |
10.2 与类似Agent框架对比
DroidRun 专注于 Android 设备控制,而其他框架如 AutoGPT 更通用。如果你只需要控制手机,DroidRun 是更轻量级的选择。
11. 未来可能的改进方向
根据我的使用经验,DroidRun 还可以在以下方面改进:
- 本地视觉模型集成:减少对UI层次结构的依赖
- 多设备协同控制:同时操作多台设备
- 操作记忆功能:记住常用流程
- 更好的错误恢复机制
- 离线模式支持
目前我正在尝试结合计算机视觉技术来增强DroidRun的界面识别能力,初步效果不错。
