安卓手机,
一行一行地控制。
用 Python、Node.js、命令行或 AI 智能体
操作真实手机。
不需要 ADB、USB 数据线或 root。
pip install droidlinenpm install droidline- 还没有发送任何一行。发送第一行,或运行整个脚本。
d.launch("dev.droidline.demo")在浏览器中模拟 droidline-fakephone 运行的同一个演示应用。请求和回复采用真实的数据行格式。
手机主动连接,
你的代码只和 localhost 说话。
电脑上运行 droidline serve,手机上的 Droidline 应用主动连接它。所以手机不开放端口,也不需要 adb forward。你的代码向 localhost:8780 发送一行 JSON,再读回一行。
- 端到端加密
- 握手之后的每一行都用 P-256 密钥交换和 AES-256-GCM 加密。
- 等待由手机完成
- touch 最多等待 10 秒让目标出现,必要时自动改用坐标点击。
- 三项权限,无需 root
- 无障碍服务、输入法,以及按需使用的按应用 VPN。不需要 Shizuku 或 adb。
按元素操作,
而不是按像素。
dump() 以树的形式返回界面。每个元素都有 text、id 和 desc。传入字段和值,touch 会等待元素出现并点击;如果元素拒绝点击,就改为点击它 bounds 的中心。
在手机上选一个元素
这个元素在 dump() 中
选择一个元素即可查看字段。选择一个元素即可查看字段。每种语言里
都是同一个名字。
touch 在 SDK、通信协议、CLI 和 MCP 工具中都叫 touch。它们全部由同一个文件 commands.json 生成,新增一条命令,所有语言同时获得。
pip install droidline
from droidline import connect
d = connect()
d.touch("text", "登录")npm install droidline
import { connect } from "droidline";
const d = await connect();
await d.touch("text", "登录");droidline touch text "登录"curl -X POST localhost:8780/devices/_/touch \
-H 'content-type: application/json' \
-d '{"by":"text","value":"登录"}'{"id":1,"cmd":"touch","by":"text","value":"登录"}向 localhost:8780 打开 TCP 套接字,写一行 JSON,读回一行。
阅读指南: 其他任何语言{
"mcpServers": {
"droidline": { "command": "droidline", "args": ["mcp"] }
}
}把这段配置加入 MCP 客户端。Claude、Cursor 等智能体会把每条命令当作工具,并用 dump 查看界面。
阅读指南: MCP为一整架手机
而设计。
一台电脑控制多部手机。发给同一部手机的命令按顺序执行,不同手机之间并行执行。
shelf-01 在线 lan
同一 Wi-Fi: 手机通过 UDP 广播找到电脑并直接连接。
d = dl.device("shelf-01")
d.launch("com.android.chrome")- 用名字,不用序列号给手机起一次名字(shelf-01),之后在所有接口中都用这个名字调用。
- 每个应用一个代理通过本地 VPN 让指定应用走 socks5 或 http,每部手机一个上游。
- 通知就是事件用 wait_notification 等待一条,或通过带签名的 Webhook 全部接收。
- 不会执行两次移动数据断开后重连的手机会从中断处继续,正在执行的命令不会重复执行。
离开 Wi-Fi 也能用。
使用移动数据的手机位于运营商 NAT 之后,无法接受外部连接,所以手机总是主动向外连接。选择适合你网络的方式;手机会按顺序尝试,并在连上同一 Wi-Fi 时切回。
握手之后的每一行都经过端到端加密,隧道或中继只能转发密文。 远程连接指南
- 无法打开其他应用未导出的界面。launch 会改为打开该应用的启动界面。
- 无法解锁 PIN、图案或密码锁屏。
- Android 15 及以上无法从通知中读取验证码:能知道验证码已到达,号码需要在应用中读取。
- 游戏和部分自定义界面不提供元素,无法按元素点击。这类界面请用 tap 坐标和 color(x, y)。
- 需要系统设置的命令不会立刻完成:强行停止、清除数据和网络开关需要代你点击按钮,耗时数秒。
与 ADB 工具和
手机端脚本有何不同。
| Droidline | 基于 ADB 的工具uiautomator2 3.x、Appium UiAutomator2 | 在手机上运行的脚本Auto.js、AutoX.js | |
|---|---|---|---|
| 需要 ADB | 否 | 是 | 否 |
| 代码运行位置 | 你的电脑 | 你的电脑 | 手机 |
| 语言 | 任意语言:SDK、HTTP 或套接字 | 工具提供的客户端库 | JavaScript |
| 更擅长 | 通过 Wi-Fi 或移动数据无线控制多部手机 | 安装应用、adb shell、插桩测试、未导出界面 | 完全不需要电脑 |
大家最先
问的问题。
任何时候都需要 ADB 吗?
不需要。用 APK 文件安装应用,在手机设置中开启权限,再用二维码或 6 位代码配对即可。Android 13 及以上还需要为该应用允许一次受限制的设置,应用会指引你。
手机使用移动数据时也能用吗?
能。手机总是主动向外连接,所以在运营商 NAT 之后也能工作。可以使用端口转发、Cloudflare Tunnel 等隧道,或部署在 Cloudflare Workers 或 VPS 上的自建中继。我们不运营公共中继。
中继或隧道能看到我的屏幕或命令吗?
不能。两行握手之后,每一行都用只有你的电脑和手机持有的密钥进行 AES-256-GCM 加密。中继只能看到设备 ID、大小和时间。
支持哪些安卓版本?
Android 9(API 28)及以上。部分功能需要更高版本:按应用代理需要 Android 10,无障碍截图需要 Android 11;更低版本首次截图时会请求一次屏幕录制权限。
应用在 Google Play 上吗?
不在。签名的 APK 发布在 GitHub Releases,有新版本时应用会提醒你。
需要 root 或 Shizuku 吗?
不需要。所有功能都基于无障碍服务、Droidline 输入法和安卓 VPN 接口,在你授权后任何应用都能使用这些接口。
AI 智能体能用吗?
能。droidline mcp 把每条命令作为 MCP 工具提供。智能体用 dump 查看界面,用 touch、input 或 scroll_to 操作。
命令执行时电脑重启会怎样?
手机会保存尚未确认的回复,重连后重新发送。执行中的命令不会被执行两次;如果是手机应用本身重启,调用会返回 AGENT_RESTARTED,由你决定如何处理。
配对你的
第一部手机。
- 在电脑上运行服务器
droidline serve - 安装应用并配对
droidline pair - 发送一条命令
droidline touch text "OK"