安卓手机,
一行一行地控制。

用 Python、Node.js、命令行或 AI 智能体
操作真实手机。
不需要 ADB、USB 数据线或 root。

安装 SDKpip install droidlinenpm install droidline
shelf-01在线 · Android 14login.py
  1. 还没有发送任何一行。发送第一行,或运行整个脚本。
d.launch("dev.droidline.demo")

在浏览器中模拟 droidline-fakephone 运行的同一个演示应用。请求和回复采用真实的数据行格式。

手机主动连接,
你的代码只和 localhost 说话。

电脑上运行 droidline serve,手机上的 Droidline 应用主动连接它。所以手机不开放端口,也不需要 adb forward。你的代码向 localhost:8780 发送一行 JSON,再读回一行。

你的代码Python、Node.js、CLI、HTTP 或 MCP
每条命令一行
droidline serve在你的电脑上,代码使用 8780 端口
手机向外连接
Droidline 应用在每部手机上,Android 9 及以上
端到端加密
握手之后的每一行都用 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", "登录")
阅读指南: Python

为一整架手机
而设计。

一台电脑控制多部手机。发给同一部手机的命令按顺序执行,不同手机之间并行执行。

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 时切回。

internet你的电脑droidline serve路由器手机
同一 Wi-Fi手机通过 UDP 广播找到电脑并直接连接。

握手之后的每一行都经过端到端加密,隧道或中继只能转发密文。 远程连接指南

Droidline
做不到的事。

它只使用普通应用能获得的权限。因此有些事做不到,最好在开始前了解。

查看完整限制列表
  1. 无法打开其他应用未导出的界面。launch 会改为打开该应用的启动界面。
  2. 无法解锁 PIN、图案或密码锁屏。
  3. Android 15 及以上无法从通知中读取验证码:能知道验证码已到达,号码需要在应用中读取。
  4. 游戏和部分自定义界面不提供元素,无法按元素点击。这类界面请用 tap 坐标和 color(x, y)。
  5. 需要系统设置的命令不会立刻完成:强行停止、清除数据和网络开关需要代你点击按钮,耗时数秒。

与 ADB 工具和
手机端脚本有何不同。

Droidline基于 ADB 的工具uiautomator2 3.x、Appium UiAutomator2在手机上运行的脚本Auto.js、AutoX.js
需要 ADB否是否
代码运行位置你的电脑你的电脑手机
语言任意语言:SDK、HTTP 或套接字工具提供的客户端库JavaScript
更擅长通过 Wi-Fi 或移动数据无线控制多部手机安装应用、adb shell、插桩测试、未导出界面完全不需要电脑

来源: uiautomator2, Appium UiAutomator2 driver, AutoX.js

大家最先
问的问题。

任何时候都需要 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,由你决定如何处理。

配对你的
第一部手机。

  1. 在电脑上运行服务器droidline serve
  2. 安装应用并配对droidline pair
  3. 发送一条命令droidline touch text "OK"