ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

ADB 自动化任务调度完全指南:定时执行与条件触发的 5 个实操技巧

ADB 自动化任务调度完全指南:定时执行与条件触发的 5 个实操技巧

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 托管
设备端不想依赖电脑的长期任务不依赖 PCAndroid 没有开放系统级 crontab,一般由 App 用 AlarmManager 实现,或在设备上装 Termux 使用其自带的 cron

动手前建议先确认两件事:一是设备已连接且状态正常(adb devices能看到device状态);二是如果走无线连接,adb connect掉线后任务会失败,可以在脚本里加一步重连检查。更多连接方式可以参考项目主文档 README.md 的设备连接章节。

crontab 定时执行 adb 命令的配置步骤

这一节解决的问题是:固定时间自动跑一条 adb 命令,这是最轻量的定时执行方案。

步骤如下:

  1. 执行crontab -e打开定时任务编辑器。
  2. 按下面的格式追加任务行,注意五段分别对应分、时、日、月、星期。
  3. 保存后用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 done

dumpsys 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。

常见问题排查:任务没跑与条件不触发

这一节集中处理两类高频问题。

定时任务不执行的排查步骤

按顺序检查:

  1. crontab -l确认任务行真的存在,且五段时间字段没有写错。
  2. 确认 cron 服务在运行(systemctl status cron或crond,不同发行版服务名不同)。
  3. 任务里 adb 是否用了绝对路径——这是最高频的失败原因。
  4. adb devices确认任务触发时刻设备在线;无线连接的场景尤其要检查是否掉线。
  5. 翻日志~/adb_task.log,报错信息通常比猜更快。

触发条件不生效的排查步骤

  1. 手动跑一遍状态读取命令(如adb shell dumpsys battery),确认脚本里的 grep/awk 在当前 ROM 上确实能取到值。
  2. 检查轮询脚本是否还活着:ps -ef | grep你的脚本名,后台进程经常被连带杀掉。
  3. 轮询间隔是否过大,或阈值判断方向写反(-lt/-gt)。
  4. 涉及屏幕的操作(截图、录屏)在熄屏状态下会失败,可以先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),仅供参考

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进