字
字节笔记本
2026年3月13日
PhoneDriver:基于视觉的 Android 自动化代理
API中转
¥120
本文介绍 PhoneDriver,一个基于 Python 的移动自动化代理。该项目使用 Qwen3-VL 视觉语言模型来理解和通过与 Android 设备交互,通过视觉分析屏幕内容并执行 ADB 命令,实现了真正的"看懂"手机屏幕并进行自动化操作。
项目简介
PhoneDriver 是一个开源的 Android 自动化工具,由 OminousIndustries 开发。与传统基于坐标或元素定位的自动化工具不同,PhoneDriver 利用视觉语言模型直接"看懂"屏幕内容,理解 UI 元素和用户意图,然后通过 ADB 执行相应的操作。
核心特性
- 视觉驱动自动化:使用 Qwen3-VL 视觉理解手机屏幕
- ADB 集成:通过 ADB 命令控制 Android 设备
- 自然语言任务:用纯英语描述你想要做什么
- Web UI:内置 Gradio 界面便于控制
- 实时反馈:实时屏幕截图和执行日志
- 智能理解:理解 UI 元素、文本、图标和布局
技术架构
- Python 3.10+:核心开发语言
- Qwen3-VL:视觉语言模型(4B/8B)
- ADB:Android 调试桥
- Gradio:Web UI 界面
- Transformers:Hugging Face 模型库
安装指南
前置要求
- Python 3.10+
- Android 设备(启用 USB 调试和开发者模式)
- ADB(Android Debug Bridge)
- GPU(24GB VRAM,用于 Qwen3-VL-8B 模型)
安装步骤
1. 安装 ADB
bash
# Linux/Ubuntu
sudo apt update
sudo apt install adb2. 克隆仓库并安装依赖
bash
git clone https://github.com/OminousIndustries/PhoneDriver.git
cd PhoneDriver
# 创建虚拟环境
python -m venv phonedriver
source phonedriver/bin/activate
# 安装依赖
pip install git+https://github.com/huggingface/transformers
pip install pillow gradio qwen_vl_utils requests3. 连接设备
bash
# 在 Android 设备上启用 USB 调试
# 通过 USB 连接
# 验证连接
adb devices4. 运行应用
bash
python app.py快速开始
Web 界面使用
bash
# 1. 启动应用
python app.py
# 2. 打开浏览器
# 访问 http://localhost:7860
# 3. 输入自然语言任务
"打开微信并给张三发送消息"
"在抖音上搜索猫咪视频"
"关闭所有后台应用"命令行使用
python
from PhoneDriver import PhoneDriver
# 初始化
driver = PhoneDriver()
# 执行任务
driver.execute("打开设置")
driver.execute("连接到 WiFi")
driver.execute("打开蓝牙")工作原理
1. 视觉理解
text
手机屏幕
↓
截图 (ADB)
↓
Qwen3-VL 模型
↓
理解 UI 元素、文本、图标
↓
生成操作计划2. 执行流程
text
用户输入自然语言
↓
模型理解意图
↓
生成 ADB 命令序列
↓
执行命令
↓
截取新屏幕
↓
验证结果
↓
继续或调整3. 反馈循环
- 截图 → 分析 → 操作 → 截图 → 分析
- 实时验证操作结果
- 自动调整策略
使用场景
场景 1:应用自动化
text
任务:"打开微信并给张三发送消息"
执行流程:
1. 解锁手机
2. 找到微信图标
3. 点击打开
4. 搜索联系人
5. 点击进入对话
6. 输入消息
7. 发送场景 2:系统设置
text
任务:"连接到办公室 WiFi"
执行流程:
1. 打开设置
2. 进入 WiFi 设置
3. 选择目标网络
4. 输入密码
5. 连接场景 3:应用测试
text
任务:"测试购物应用的下单流程"
执行流程:
1. 打开应用
2. 浏览商品
3. 添加到购物车
4. 结账
5. 验证成功场景 4:批量操作
text
任务:"删除所有未读邮件"
执行流程:
1. 打开邮件应用
2. 识别未读邮件
3. 逐个删除
4. 确认完成配置选项
模型选择
python
# 使用 Qwen3-VL-4B(默认)
model = "Qwen/Qwen3-VL-4B"
# 使用 Qwen3-VL-8B(更高精度)
model = "Qwen/Qwen3-VL-8B"设备配置
python
# 指定设备
device_id = "emulator-5554"
# 截图质量
screenshot_quality = 90
# 操作延迟
action_delay = 1.0UI 配置
python
# Gradio 界面
server_port = 7860
share = False # 是否创建公共链接高级功能
1. 自定义任务
python
def custom_task(driver):
# 截图
screenshot = driver.screenshot()
# 分析
analysis = driver.analyze(screenshot)
# 执行
driver.tap(analysis['elements'][0])
# 验证
return driver.verify()2. 批量处理
python
tasks = [
"打开应用 A",
"执行操作 1",
"执行操作 2",
"关闭应用"
]
for task in tasks:
driver.execute(task)
time.sleep(2)3. 错误处理
python
try:
driver.execute("打开不存在的应用")
except Exception as e:
# 自动重试
driver.retry("打开应用", max_retries=3)最佳实践
1. 任务描述
bash
# ❌ 模糊
"点一下那里"
# ✅ 具体
"点击屏幕中央的设置按钮"2. 错误恢复
bash
# 添加重试逻辑
# 提供备选方案
# 记录错误日志3. 性能优化
bash
# 使用 GPU 加速
# 批量操作
# 减少截图频率注意事项
- 需要足够的 GPU 显存(24GB 推荐)
- 不同设备屏幕分辨率可能影响识别
- 某些操作可能需要 root 权限
- 复杂动画可能导致识别失败
项目链接
- GitHub 仓库:https://github.com/OminousIndustries/PhoneDriver
- 开源协议:MIT License
分享: