ADB 自动化任务调度完全指南:定时执行与条件触发的 5 个实操技巧
【免费下载链接】awesome-adbADB Usage Complete / ADB 用法大全项目地址: https://gitcode.com/gh_mirrors/aw/awesome-adb
这篇文章基于 ADB 用法大全(awesome-adb,一个系统整理 adb 命令用法的开源文档库)整理,主题是 ADB 自动化任务调度的落地玩法:用 crontab 实现 adb 命令的定时执行,用轮询脚本按电量、WiFi 等状态触发操作,再把截图备份固化成可复用脚本。
先选运行位置:crontab、轮询脚本与设备端对比
这一节解决的问题是:任务到底在哪里跑,选型错了后面全白搭。
| 运行位置 | 适合场景 | 优点 | 限制 |
|---|---|---|---|
| 电脑端 crontab | 固定时间点的清理、备份、安装 | 配置一次长期生效,不占设备资源 | 电脑必须开机,设备需保持连接 |
| 电脑端轮询脚本 | 电量、WiFi 等条件触发 | 能读设备状态做判断,逻辑灵活 | 需要常驻进程,建议用 nohup 或 systemd 托管 |
| 设备端 | 不想依赖电脑的长期任务 | 不依赖 PC | Android 没有开放系统级 crontab,一般由 App 用 AlarmManager 实现,或在设备上装 Termux 使用其自带的 cron |
动手前建议先确认两件事:一是设备已连接且状态正常(adb devices能看到device状态);二是如果走无线连接,adb connect掉线后任务会失败,可以在脚本里加一步重连检查。更多连接方式可以参考项目主文档 README.md 的设备连接章节。
crontab 定时执行 adb 命令的配置步骤
这一节解决的问题是:固定时间自动跑一条 adb 命令,这是最轻量的定时执行方案。
步骤如下:
- 执行
crontab -e打开定时任务编辑器。 - 按下面的格式追加任务行,注意五段分别对应分、时、日、月、星期。
- 保存后用
crontab -l确认已写入。
# 每天凌晨 2 点清理指定应用的数据 0 2 * * * /opt/android-sdk/platform-tools/adb shell pm clear com.example.app # 每周一早上 8 点把设备上的备份目录拉到电脑 0 8 * * 1 /opt/android-sdk/platform-tools/adb pull /sdcard/backup ~/backup两个容易踩的点:
- cron 环境的 PATH 非常精简,adb 一定要写绝对路径,先用
which adb确认位置。 - 多设备环境给每条命令加
-s <序列号>,序列号同样用adb devices查看,例如adb -s cf264b8f shell pm clear ...。
建议给每条任务追加>> ~/adb_task.log 2>&1,把输出和报错都落盘,之后排查只翻这一个文件就行。
按电量、WiFi 状态轮询触发的脚本写法
这一节解决的问题是:满足某个条件才执行。adb 本身不带条件判断,通用做法是脚本周期性读取设备状态,判断放在电脑端,命中后再下发命令。
🔋 电量低于阈值自动清理后台应用
#!/bin/bash # 每 5 分钟查一次电量,低于 20% 时停掉目标应用并记录日志 PKG=com.example.backgroundapp THRESHOLD=20 while true; do level=$(adb shell dumpsys battery | grep -E '^\s*level:' | awk '{print $2}') if [ -n "$level" ] && [ "$level" -lt $THRESHOLD ]; then adb shell am force-stop "$PKG" echo "$(date '+%F %T') 电量 ${level}%,已停止 $PKG" >> ~/adb_task.log fi sleep 300 done注意两点:dumpsys battery的字段名在不同 Android 版本上略有差异,先手动跑一遍adb shell dumpsys battery确认level行的格式;条件判断写在电脑端,避免在adb shell里再嵌套 adb 命令,那样引号转义很容易出错。
连上指定 WiFi 时触发备份
#!/bin/bash # 轮询当前连接的 WiFi,命中目标 SSID 就执行备份 TARGET="HomeWiFi" while true; do ssid=$(adb shell dumpsys wifi | grep -m1 'SSID' | awk -F'"' '{print $2}') if [ "$ssid" = "$TARGET" ]; then echo "已连上 $TARGET,开始备份" # 这里放具体命令,例如 adb pull break fi sleep 60 donedumpsys wifi的输出格式随 ROM 变化较大,写死之前同样建议先手动核对一次。如果你的目标是"连上某网络就让应用做某事",更稳的做法是电脑端直接跑你自己的备份逻辑,而不是指望am broadcast某个 action——不少 ROM 上广播会被静默丢弃,行为不可控。
📸 每日截图备份脚本的完整写法
这一节解决的问题是:把多步操作打包成一条命令。截图、拉取、清理三步连起来,就是一个很典型的自动化任务:
#!/bin/bash # 截图 -> 拉到电脑 -> 清理设备上的临时文件 ts=$(date +%Y%m%d_%H%M%S) file=/sdcard/screenshot_${ts}.png adb shell screencap -p "$file" adb pull "$file" ~/Pictures/ adb shell rm "$file" echo "$(date '+%F %T') 截图完成" >> ~/adb_task.log保存为screenshot.sh并赋予可执行权限后,在 crontab 里加一行就能每天定点截图:30 23 * * * ~/scripts/screenshot.sh >> ~/adb_task.log 2>&1。
再补充一个提醒:常见的"循环遍历第三方应用并打开商店详情页检查更新"的写法实际不可靠——market://协议依赖设备上装有对应商店,很多设备直接打不开。真要核对版本,更可靠的思路是用adb shell pm list packages -3枚举第三方应用,再用adb shell dumpsys package <包名>读出versionName做比对,命令细节可查 related/pm.md 和 related/dumpsys.md。
常见问题排查:任务没跑与条件不触发
这一节集中处理两类高频问题。
定时任务不执行的排查步骤
按顺序检查:
crontab -l确认任务行真的存在,且五段时间字段没有写错。- 确认 cron 服务在运行(
systemctl status cron或crond,不同发行版服务名不同)。 - 任务里 adb 是否用了绝对路径——这是最高频的失败原因。
adb devices确认任务触发时刻设备在线;无线连接的场景尤其要检查是否掉线。- 翻日志
~/adb_task.log,报错信息通常比猜更快。
触发条件不生效的排查步骤
- 手动跑一遍状态读取命令(如
adb shell dumpsys battery),确认脚本里的 grep/awk 在当前 ROM 上确实能取到值。 - 检查轮询脚本是否还活着:
ps -ef | grep你的脚本名,后台进程经常被连带杀掉。 - 轮询间隔是否过大,或阈值判断方向写反(
-lt/-gt)。 - 涉及屏幕的操作(截图、录屏)在熄屏状态下会失败,可以先
adb shell input keyevent 26点亮屏幕再执行。
跨设备联动也归在这一类:给每条命令显式指定-s,例如设备 A 按电源键的同时唤醒设备 B:
# 设备 A 按电源键(开/关切换),同时唤醒设备 B adb -s cf264b8f shell input keyevent KEYCODE_POWER adb -s 10.129.164.6:5555 shell input keyevent KEYCODE_WAKEUP注意 KEYCODE_POWER 是开/关切换,执行前先确认设备 A 当前的屏幕状态。
小结与下一步建议
小结:ADB 自动化任务调度本质是"电脑端负责排班与判断,设备端负责执行"。crontab 管固定时间点,轮询脚本管条件触发,脚本文件管多步操作,三者搭配再配一份统一日志,日常备份、清理、截图这类事就不用手动管了。
下一步建议:
- 先从一个最简单的 crontab 任务跑通全流程(配置 → 触发 → 查日志),再逐步加条件触发。
- 需要启动/停止应用、发广播时,查 related/am.md;涉及应用管理查 related/pm.md;要看前台 Activity 等系统状态查 related/dumpsys.md。
- 想进一步做 UI 级的自动化(点击、滑动),可以看 related/uiautomator.md 的 uiautomator 用法。
【免费下载链接】awesome-adbADB Usage Complete / ADB 用法大全项目地址: https://gitcode.com/gh_mirrors/aw/awesome-adb
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考