ByteNoteByteNote

字节笔记本

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 adb

2. 克隆仓库并安装依赖

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 requests

3. 连接设备

bash
# 在 Android 设备上启用 USB 调试
# 通过 USB 连接

# 验证连接
adb devices

4. 运行应用

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.0

UI 配置

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 权限
  • 复杂动画可能导致识别失败

项目链接

分享: