命令参考

Droidline 全部命令的参数、返回值、错误,以及在 Python、Node.js、CLI 和 HTTP 中的同一调用。

本页为译文。如与英文版不一致,以英文版为准。 English

每条命令都列出它的作用、参数、返回值和可能的错误,然后给出各个接口中的同一调用。在任意示例中选择一种语言,整页都会跟着切换。Python 示例假定已经执行了 d = connect()(服务器命令为 dl = Droidline()),Node.js 示例假定已经执行了 const d = await connect()(const dl = new Droidline())。

界面

dumpscreenshotcurrent

dump

返回当前界面的节点树

名称类型默认值含义
pathstring保存为本地 JSON 文件
all_windowsboolfalse包含状态栏、键盘等系统窗口

返回: 包含以下字段的对象: package, activity, width, height, tree

需要: 无障碍服务

d.dump("screen.json")   # saved on your PC

screenshot

截取屏幕

Android 11 及以上使用无障碍截图,9-10 首次需要允许屏幕录制

名称类型默认值含义
pathstring保存到本地文件,扩展名决定 png 或 jpeg
formatstring png | jpeg"jpeg"图片格式
qualityint80JPEG 质量 1-100
scalenumber1缩放比例 0.1-1.0,移动网络下有用

返回: 包含以下字段的对象: format, width, height, data

需要: 无障碍服务

d.screenshot("shot.png")   # saved on your PC

current

前台包名和 Activity

返回: 包含以下字段的对象: package, activity

需要: 无障碍服务

d.current()

坐标

taplong_tapswipe

tap

点击坐标

名称类型默认值含义
xint必填屏幕像素 X
yint必填屏幕像素 Y

返回: 包含以下字段的对象: ms

需要: 无障碍服务

d.tap(540, 1200)

long_tap

长按坐标

名称类型默认值含义
xint必填屏幕像素 X
yint必填屏幕像素 Y
msint800按住时长(毫秒)

返回: 包含以下字段的对象: ms

需要: 无障碍服务

d.long_tap(540, 1200, 800)

swipe

在两点之间或按方向滑动

名称类型默认值含义
x1int|string必填起点 X,或方向:up、down、left、right
y1int起点 Y
x2int终点 X
y2int终点 Y
msint300时长(毫秒)

返回: 包含以下字段的对象: ms

需要: 无障碍服务

d.swipe(540, 1600, 540, 400, 300)

元素

touchlong_touchscroll_to

touch

等待元素出现并点击

节点拒绝点击时改为点击 bounds 中心。via 表示成功方式:node、parent 或 gesture

名称类型默认值含义
byselector必填按哪个 dump 字段查找:text、textContains、id、desc、descContains、class
valuestring必填要匹配的值
nthint0多个元素匹配时的序号,从 0 开始
timeoutnumber10 s等待目标出现的秒数

返回: 包含以下字段的对象: via, ms

简写: touchById(value), touchByText(value), touchByDesc(value)

错误: NOT_FOUND, NOT_CLICKABLE, NO_ACCESSIBILITY

需要: 无障碍服务

d.touch("text", "登录")

long_touch

等待元素出现并长按

名称类型默认值含义
byselector必填按哪个 dump 字段查找:text、textContains、id、desc、descContains、class
valuestring必填要匹配的值
msint800按住时长(毫秒)
nthint0多个元素匹配时的序号,从 0 开始
timeoutnumber10 s等待目标出现的秒数

返回: 包含以下字段的对象: via, ms

需要: 无障碍服务

d.long_touch("text", "消息")

scroll_to

滚动直到元素可见

名称类型默认值含义
byselector必填按哪个 dump 字段查找:text、textContains、id、desc、descContains、class
valuestring必填要匹配的值
directionstring down | up | left | right"down"滚动方向
max_swipesint20滑动这么多次后放弃
nthint0多个元素匹配时的序号,从 0 开始

返回: 包含以下字段的对象: swipes

需要: 无障碍服务

d.scroll_to("text", "设置")

输入

inputclearsendkey

input

等待输入框并填入文字

使用无障碍设置文本操作;忽略该操作的输入框在选择了 Droidline 键盘时改用键盘输入

名称类型默认值含义
byselector必填按哪个 dump 字段查找:text、textContains、id、desc、descContains、class
valuestring必填要匹配的值
textstring必填要输入的文字
appendboolfalse保留原有文字并追加
nthint0多个元素匹配时的序号,从 0 开始
timeoutnumber10 s等待目标出现的秒数

返回: 包含以下字段的对象: via, ms

需要: 无障碍服务

d.input("id", "email", "me@example.com")

clear

清空输入框

名称类型默认值含义
byselector必填按哪个 dump 字段查找:text、textContains、id、desc、descContains、class
valuestring必填要匹配的值
nthint0多个元素匹配时的序号,从 0 开始
timeoutnumber10 s等待目标出现的秒数

返回: 包含以下字段的对象: ms

需要: 无障碍服务

d.clear("id", "email")

sendkey

发送按键名、键码或文字

back、home、recents、notifications、quick_settings、lock 使用无障碍全局操作;其他按键和文字通过 Droidline 键盘发送到焦点输入框

名称类型默认值含义
keystring|int按键名(enter、tab、del、space、escape、up、down、left、right、back、home 等)、Android 键码或要输入的文字
textstring按字面输入,即使与按键名相同

返回: 包含以下字段的对象: via

错误: NO_IME, BAD_ARGS

需要: 无障碍服务

d.sendkey("enter")

检查

existswaitwait_goneget_text

exists

元素当前是否在屏幕上,不等待

名称类型默认值含义
byselector必填按哪个 dump 字段查找:text、textContains、id、desc、descContains、class
valuestring必填要匹配的值
nthint0多个元素匹配时的序号,从 0 开始

返回: 以下类型的值: bool

需要: 无障碍服务

d.exists("text", "关闭广告")

wait

等待元素出现

名称类型默认值含义
byselector必填按哪个 dump 字段查找:text、textContains、id、desc、descContains、class
valuestring必填要匹配的值
timeoutnumber10 s等待目标出现的秒数
nthint0多个元素匹配时的序号,从 0 开始

返回: 包含以下字段的对象: ms

错误: NOT_FOUND

需要: 无障碍服务

d.wait("text", "完成", timeout=30)

wait_gone

等待元素消失

名称类型默认值含义
byselector必填按哪个 dump 字段查找:text、textContains、id、desc、descContains、class
valuestring必填要匹配的值
timeoutnumber10 s等待目标出现的秒数

返回: 包含以下字段的对象: ms

错误: TIMEOUT

需要: 无障碍服务

d.wait_gone("text", "加载中")

get_text

元素的文字,不存在时为空字符串

名称类型默认值含义
byselector必填按哪个 dump 字段查找:text、textContains、id、desc、descContains、class
valuestring必填要匹配的值
nthint0多个元素匹配时的序号,从 0 开始

返回: 以下类型的值: string

需要: 无障碍服务

d.get_text("id", "balance")

条件

checkedenabledselectedcountwhichin_appkeyboard_shownlast_toastcolor

checked

开关或复选框为开启时返回 true

名称类型默认值含义
byselector必填按哪个 dump 字段查找:text、textContains、id、desc、descContains、class
valuestring必填要匹配的值
nthint0多个元素匹配时的序号,从 0 开始

返回: 以下类型的值: bool

需要: 无障碍服务

d.checked("id", "auto_login")

enabled

元素可点击时返回 true

名称类型默认值含义
byselector必填按哪个 dump 字段查找:text、textContains、id、desc、descContains、class
valuestring必填要匹配的值
nthint0多个元素匹配时的序号,从 0 开始

返回: 以下类型的值: bool

需要: 无障碍服务

d.enabled("text", "下一步")

selected

标签或项目被选中时返回 true

名称类型默认值含义
byselector必填按哪个 dump 字段查找:text、textContains、id、desc、descContains、class
valuestring必填要匹配的值
nthint0多个元素匹配时的序号,从 0 开始

返回: 以下类型的值: bool

需要: 无障碍服务

d.selected("text", "首页")

count

匹配元素的数量

名称类型默认值含义
byselector必填按哪个 dump 字段查找:text、textContains、id、desc、descContains、class
valuestring必填要匹配的值

返回: 以下类型的值: int

需要: 无障碍服务

d.count("class", "android.widget.CheckBox")

which

最先出现的候选项序号,没有则为 -1

名称类型默认值含义
candidateslist<selector_pair>必填[条件, 值] 对的列表
timeoutnumber10 s等待任一候选出现的秒数

返回: 以下类型的值: int

需要: 无障碍服务

d.which([("text", "登录"), ("id", "main_tab")], timeout=15)

in_app

该应用在前台时返回 true

名称类型默认值含义
packagestring必填包名,例如 com.android.chrome

返回: 以下类型的值: bool

需要: 无障碍服务

d.in_app("com.android.chrome")

keyboard_shown

软键盘显示时返回 true

返回: 以下类型的值: bool

需要: 无障碍服务

d.keyboard_shown()

last_toast

最近一条 Toast 的文字,没有则为空字符串

名称类型默认值含义
max_agenumber30 s忽略早于此秒数的 Toast

返回: 以下类型的值: string

需要: 无障碍服务

d.last_toast()

color

坐标处的像素颜色(#RRGGBB)

用于没有无障碍节点的界面(如游戏)

名称类型默认值含义
xint必填屏幕像素 X
yint必填屏幕像素 Y

返回: 以下类型的值: string

需要: 无障碍服务

d.color(540, 1200)

设备

screen_onlockedwakelockbatteryorientationinfo

screen_on

屏幕亮着时返回 true

返回: 以下类型的值: bool

d.screen_on()

locked

处于锁屏时返回 true

返回: 以下类型的值: bool

d.locked()

wake

点亮屏幕并解除无密码的锁屏

屏幕关闭时手势会失败。PIN、图案或密码锁需要用户解锁

返回: 包含以下字段的对象: screen_on, locked

d.wake()

lock

关闭屏幕并锁定

返回: 无

需要: 无障碍服务

d.lock()

battery

电量和充电状态

返回: 包含以下字段的对象: level, charging, temperature

d.battery()

orientation

屏幕方向:portrait 或 landscape

返回: 以下类型的值: string

d.orientation()

info

型号、Android 版本、屏幕尺寸和权限状态

返回: 包含以下字段的对象: model, manufacturer, sdk, release, agent, width, height, ready

d.info()

网络

networkproxyproxy_check

network

连接类型(wifi、mobile、none)和飞行模式

返回: 包含以下字段的对象: type, airplane, metered

d.network()

proxy

通过按应用 VPN 让指定应用走上游代理

支持 http://(CONNECT)和 socks5://,可带 user:pass。传 null 或 "off" 关闭。同一时间仅一个上游。忽略代理设置的应用会断网而不是泄漏

名称类型默认值含义
urlstring|null必填socks5://user:pass@host:port、http://host:port、@kr1 这样的已保存配置,或 off
appstring|list<string>要走代理的包(可多个)

返回: 包含以下字段的对象: active, apps

错误: NO_PERMISSION, PROXY_FAILED, UNSUPPORTED

需要: VPN 权限 · Android API 29+

d.proxy("@kr1", app="com.android.chrome")

proxy_check

按应用代理状态和外部看到的 IP

名称类型默认值含义
appstring要检查的包

返回: 包含以下字段的对象: active, ip, upstream, error

d.proxy_check("com.android.chrome")

应用

launchopen_urlkillclear_dataappsinstalled

launch

启动应用,可指定 Activity

名称类型默认值含义
packagestring必填包名,例如 com.android.chrome
activitystringActivity 名称,完整名称或以点开头

返回: 包含以下字段的对象: ms

错误: APP_NOT_FOUND, ACTIVITY_BLOCKED

d.launch("com.android.settings")

open_url

打开 URL 或深层链接

名称类型默认值含义
urlstring必填http(s) 地址或应用深层链接
packagestring仅用此应用打开

返回: 无

d.open_url("https://droidline.dev")

kill

强制停止应用

设置宏:应用信息 → 强行停止 → 确定,需要几秒

名称类型默认值含义
packagestring必填包名,例如 com.android.chrome

返回: 包含以下字段的对象: via, ms

错误: APP_NOT_FOUND, MACRO_FAILED

需要: 无障碍服务

d.kill("com.android.chrome")

clear_data

清除应用数据

设置宏:应用信息 → 存储 → 清除数据 → 确定

名称类型默认值含义
packagestring必填包名,例如 com.android.chrome

返回: 包含以下字段的对象: via, ms

错误: APP_NOT_FOUND, MACRO_FAILED

需要: 无障碍服务

d.clear_data("com.android.chrome")

apps

已安装的包列表

名称类型默认值含义
systemboolfalse包含系统包

返回: 以下类型的值: list<app>

d.apps()

installed

已安装时返回版本名,否则为空字符串

名称类型默认值含义
packagestring必填包名,例如 com.android.chrome

返回: 以下类型的值: string

d.installed("com.android.chrome")

系统

backhomerecentsopen_notificationsquick_settingsdatawifiairplaneclipboardbatch

back

返回

返回: 无

需要: 无障碍服务

d.back()

home

主屏幕

返回: 无

需要: 无障碍服务

d.home()

recents

最近任务

返回: 无

需要: 无障碍服务

d.recents()

open_notifications

下拉通知栏

返回: 无

需要: 无障碍服务

d.open_notifications()

quick_settings

打开快捷设置

返回: 无

需要: 无障碍服务

d.quick_settings()

data

开关移动数据

会断开手机自身的连接。调用先返回 accepted;传入 wait 可直接得到最终结果。

名称类型默认值含义
onbool必填true 为开启,false 为关闭

返回: 包含以下字段的对象: via, ms

错误: MACRO_FAILED

需要: 无障碍服务

d.data(False, wait=True)

wifi

开关 Wi-Fi

会断开手机自身的连接。调用先返回 accepted;传入 wait 可直接得到最终结果。

名称类型默认值含义
onbool必填true 为开启,false 为关闭

返回: 包含以下字段的对象: via, ms

错误: MACRO_FAILED

需要: 无障碍服务

d.wifi(False, wait=True)

airplane

开关飞行模式

更换 IP 时,请把开和关放进同一个 batch,手机离线时也会执行

会断开手机自身的连接。调用先返回 accepted;传入 wait 可直接得到最终结果。

名称类型默认值含义
onbool必填true 为开启,false 为关闭

返回: 包含以下字段的对象: via, ms

错误: MACRO_FAILED

需要: 无障碍服务

d.airplane(True, wait=True)

clipboard

写入剪贴板;不带文字调用时读取

Android 10 及以上读取需要 Droidline 键盘为当前输入法

名称类型默认值含义
textstring要复制的文字,省略则读取

返回: 以下类型的值: string

错误: NO_IME

d.clipboard("你好")

batch

在手机上一次执行多条命令,离线时也会继续

步骤为 [命令, 参数...] 列表或 {cmd, ...} 对象。sleep(ms) 只能在 batch 中使用。若某步骤会断网,先返回 accepted,重连后再返回结果

名称类型默认值含义
stepslist<step>必填按顺序执行的命令
stop_on_errorbooltrue遇到失败步骤即停止

返回: 包含以下字段的对象: results

d.batch([("airplane", True), ("sleep", 3000), ("airplane", False)], wait=True)

Chrome

chrome.go

chrome.go

在 Chrome 中打开网址

名称类型默认值含义
urlstring必填网址,缺少 https:// 时自动补全
new_tabboolfalse在新标签页打开

返回: 包含以下字段的对象: ms

错误: APP_NOT_FOUND

d.chrome.go("droidline.dev")

通知

notificationshas_notificationwait_notificationnotification_replynotification_clicknotification_dismissnotify_filteron_notification

notifications

当前显示的通知列表

名称类型默认值含义
packagestring仅此应用

返回: 以下类型的值: list<notification>

需要: 通知使用权

d.notifications()

has_notification

当前通知中有匹配项时返回 true

名称类型默认值含义
bystring text | textContains | title | package必填text 和 textContains 同时匹配标题和正文
valuestring必填要匹配的值

返回: 以下类型的值: bool

需要: 通知使用权

d.has_notification("textContains", "发货")

wait_notification

等待匹配的通知并返回其内容

由 PC 服务器处理,不会阻塞发往手机的其他命令。Android 15 及以上系统会对应用隐藏验证码,只能得知通知到达

名称类型默认值含义
bystring text | textContains | title | package必填text 和 textContains 同时匹配标题和正文
valuestring必填要匹配的值
timeoutnumber60 s等待秒数
packagestring仅来自此应用

返回: 以下类型的值: notification

错误: TIMEOUT

需要: 通知使用权

dl.wait_notification("textContains", "验证码", 60)

notification_reply

直接回复带回复按钮的通知

名称类型默认值含义
keystring必填来自 notifications() 或通知事件的 key
textstring必填回复内容

返回: 无

需要: 通知使用权

n = d.notifications()[0]
d.notification_reply(n["key"], "我在路上")

notification_click

点击通知打开对应界面

名称类型默认值含义
keystring必填来自 notifications() 或通知事件的 key

返回: 无

需要: 通知使用权

n = d.notifications()[0]
d.notification_click(n["key"])

notification_dismiss

清除通知

名称类型默认值含义
keystring必填来自 notifications() 或通知事件的 key

返回: 无

需要: 通知使用权

n = d.notifications()[0]
d.notification_dismiss(n["key"])

notify_filter

选择哪些应用的通知发送到 PC,默认不发送任何应用

名称类型默认值含义
packageslist<string>允许的包,省略则读取当前列表

返回: 以下类型的值: list<string>

需要: 通知使用权

d.notify_filter(["com.android.chrome", "com.google.android.gm"])

on_notification

每当有匹配的通知时调用函数

仅 SDK,基于 subscribe 实现。CLI 会以 JSON 行输出匹配的通知

在 SDK 内运行,服务器收到的是一行 subscribe。

名称类型默认值含义
packagestring仅来自此应用
textContainsstring仅当标题或正文包含此文字

返回: 无

需要: 通知使用权

stop = d.on_notification(package="com.google.android.gm", callback=print)
# ... later
stop()

服务器

devicespairpair_qrrenamerevokesubscribeserver_infoauth

devices

已配对设备及其在线状态和连接方式

返回: 以下类型的值: list<device>

dl.devices()

pair

批准显示此 6 位代码的手机

名称类型默认值含义
codestring必填手机上显示的代码
namestring设备名称

返回: 以下类型的值: device

错误: PAIRING_FAILED

dl.pair("482913", name="shelf-01")

pair_qr

生成 10 分钟内有效的一次性配对二维码

名称类型默认值含义
namestring设备名称

返回: 包含以下字段的对象: uri, expires

dl.pair_qr()

rename

重命名设备

名称类型默认值含义
devicestring必填设备 ID 或名称
namestring必填新名称

返回: 以下类型的值: device

dl.rename("k7d2q9xa", "shelf-01")

revoke

取消配对设备,需要重新配对才能连接

名称类型默认值含义
devicestring必填设备 ID 或名称

返回: 无

dl.revoke("shelf-01")

subscribe

在此连接上接收事件

名称类型默认值含义
eventslist<string>必填可选 notification、screen、toast、device、result
devicestring仅此设备,省略则全部

返回: 无

dl.subscribe(["notification"])

server_info

服务器版本、端口和监听地址

返回: 包含以下字段的对象: version, server, name, proto, agent_port, client_port

dl.server_info()

auth

使用令牌认证此客户端连接

名称类型默认值含义
tokenstring必填由 droidline token 生成的客户端令牌

返回: 无

dl.auth("your-client-token")