命令行
在 bash、zsh 或 PowerShell 中使用 droidline 命令:参数怎么写、每条命令输出什么、退出码、脚本写法和定时任务。
本页为译文。如与英文版不一致,以英文版为准。 English
运行服务器的 droidline 程序同时也是一个命令行客户端。每条手机命令都可以作为子命令使用,所以不用安装其他任何东西,就能手动尝试、编写 shell 脚本和运行定时任务。
droidline launch com.android.settings
droidline touch text "Network & internet"
droidline screenshot shot.png
除了 serve、version 和 help,其他所有命令都要求服务器正在运行(在另一个终端中运行 droidline serve)。
命令行的构成
droidline [global options] <command> [arguments] [--option value]
参数遵循命令参考中的参数顺序。可选参数可以从末尾开始省略:
droidline touch text "Log in" # by, value
droidline touch text "Log in" 0 30 # by, value, nth, timeout
droidline long_tap 540 1200 800 # x, y, ms
选项按名称设置任意参数,顺序不限。对可选参数来说这样更清楚:
droidline touch text "Log in" --timeout 30
droidline screenshot small.jpg --scale 0.5 --quality 70
droidline proxy @kr1 --app com.android.chrome
有几种类型的值有专门的写法:
| 类型 | 写法 | 示例 |
|---|---|---|
| 带空格的文字 | 加引号 | droidline touch text "Close ad" |
| true / false | true 或 false(on/off 也可以) | droidline wifi false |
| 是/否选项 | 只写选项本身表示 true | droidline apps --system |
| 名称列表 | 用逗号分隔 | droidline notify_filter com.android.chrome,com.google.android.gm |
which 的候选项 | field=value 对 | droidline which text="Log in" id=main_tab |
batch 的步骤 | 用单引号括起来的 JSON | droidline batch '[["airplane",true],["sleep",3000],["airplane",false]]' |
droidline help 列出所有命令;droidline help touch 显示一条命令的参数、默认值和一个示例。
全局选项
这些选项写在命令之前:
| 选项 | 含义 |
|---|---|
--device NAME、-d NAME | 要使用的手机。有多部手机在线时需要。 |
--json | 把服务器的原始回复输出为一行 JSON。 |
--addr HOST:PORT | 服务器地址。默认 127.0.0.1:8780。 |
--token TOKEN | 客户端令牌,用于另一台机器上的服务器。 |
--home DIR | 设置文件夹,用于 serve 和设置类命令。 |
droidline -d shelf-02 current
droidline --json exists text OK
同样的设置也可以来自 DROIDLINE_DEVICE、DROIDLINE_HOST、DROIDLINE_PORT 和 DROIDLINE_TOKEN。
命令输出什么
| 命令返回 | 输出 | 示例 |
|---|---|---|
| 一个值 | 只输出这个值 | droidline exists text OK 输出 true |
| 无 | ok | droidline back |
| 多个字段 | 一行 JSON | droidline battery 输出 {"charging":true,"level":87,"temperature":31.5} |
| 界面转储 | 缩进的 JSON;如果给了文件名,则输出文件名 | droidline dump screen.json |
| 截图 | 文件名和尺寸 | after-login.png (1080x2400) |
错误输出到标准错误,所以 $(...) 只会捕获真正的输出。
退出码
| 代码 | 含义 |
|---|---|
0 | 命令成功。条件回答 false 也算成功。 |
1 | 命令失败:没有找到元素、手机离线、服务器拒绝了某个参数。 |
2 | 命令行本身有误:未知的命令或选项,或者参数太多。 |
在 bash 或 zsh 中编写脚本
打开 set -e,让脚本在第一次失败时停止;用 $(...) 读取值;把条件当作文字进行比较:
#!/usr/bin/env bash
set -e
droidline launch dev.droidline.demo
if [ "$(droidline exists text "Close ad")" = "true" ]; then
droidline touch text "Close ad"
fi
balance=$(droidline get_text id balance)
echo "Balance is $balance"
# 预料之中的失败:处理它,而不是停止。
if ! droidline touch text "Maybe later" --timeout 3; then
echo "no prompt this time"
fi
用 jq 遍历每一部在线的手机:
for name in $(droidline --json devices | jq -r '.value[] | select(.online) | .name'); do
droidline -d "$name" launch com.android.chrome &
done
wait # 各部手机并行运行;等待全部完成
PowerShell
同样的脚本,用 PowerShell 7 编写。条件以字符串 true 和 false 返回:
# droidline 命令失败时停止(PowerShell 7.4 及更高版本)。
$PSNativeCommandUseErrorActionPreference = $true
$ErrorActionPreference = "Stop"
droidline launch dev.droidline.demo
if ((droidline exists text "Close ad") -eq "true") {
droidline touch text "Close ad"
}
$balance = droidline get_text id balance
"Balance is $balance"
# 预料之中的失败:检查退出码,而不是停止。
$PSNativeCommandUseErrorActionPreference = $false
droidline touch text "Maybe later" --timeout 3
if ($LASTEXITCODE -ne 0) { "no prompt this time" }
用 PowerShell 自带的 JSON 支持遍历手机:
$phones = (droidline --json devices | ConvertFrom-Json).value | Where-Object online
foreach ($p in $phones) {
droidline -d $p.name launch com.android.chrome
}
在 Windows PowerShell 5.1 中没有 $PSNativeCommandUseErrorActionPreference;请在每条必须成功的命令之后检查 $LASTEXITCODE。
定时任务
CLI 只依赖服务器,所以很适合定时任务。先确保 droidline serve 一直在运行(见配置)。
# crontab -e:每天 07:00 唤醒手机,并打开早上用的应用
0 7 * * * /home/me/.local/bin/droidline -d shelf-01 wake && /home/me/.local/bin/droidline -d shelf-01 launch com.example.news$action = New-ScheduledTaskAction -Execute "pwsh.exe" -Argument "-NoProfile -File C:\Scripts\morning.ps1"
$trigger = New-ScheduledTaskTrigger -Daily -At 7am
Register-ScheduledTask -TaskName "Droidline morning" -Action $action -Trigger $trigger在定时任务中使用完整路径:它们运行时的 PATH 比你的终端少。
设置命令
除了手机命令,CLI 还可以管理服务器:
| 命令 | 作用 |
|---|---|
droidline serve | 运行服务器。保持它打开。 |
droidline pair | 显示用于配对手机的二维码。 |
droidline pair <code> [--name NAME] | 批准显示这个 6 位代码的手机。 |
droidline devices | 列出已配对的手机及其状态。 |
droidline rename <id> <name> | 给手机改名。 |
droidline revoke <device> | 移除手机的配对。 |
droidline doctor | 检查设置,并输出设置文件夹。 |
droidline token create|list|revoke | 客户端令牌,用于从另一台机器使用服务器。 |
droidline relay set|status|off | 通过你的中继连接使用移动数据的手机。 |
droidline proxy add|list|remove | 为按应用代理保存的上游代理。 |
droidline webhook secret | 通知 Webhook 的签名密钥。 |
droidline on_notification [--package P] | 把每条通知输出为一行 JSON,直到你停止它。 |
droidline mcp | 为 AI 智能体运行 MCP 服务器。 |
droidline version | 输出版本号。 |