ADB自动化调度完全指南:6种定时执行与条件触发方法
【免费下载链接】awesome-adbADB Usage Complete / ADB 用法大全项目地址: https://gitcode.com/gh_mirrors/aw/awesome-adb
晚上十一点,你还要手动敲一遍adb命令去备份截图;第二天出门前,又得惦记着检查手机电量够不够撑到公司。这类重复、规律、规则明确的操作,恰恰是ADB自动化调度最擅长替你做掉的部分——把命令交给脚本,设备到点、到状态就会自己动。这篇文章不按命令分类,而是按"你想让手机帮你干什么"来讲:定时任务怎么配、设备状态触发怎么搭、多设备怎么协同,全部结合 awesome-adb(ADB用法大全)里的命令来说。
📅 先让ADB命令按时跑起来
最常见的场景是"每天固定时间干一件事":拉取备份、清理应用缓存、归档日志。这类需求在 Linux 和 macOS 上直接用系统自带的crontab就能解决,不需要额外装任何东西。
三步配置crontab定时任务
运行crontab -e打开编辑,按"分 时 日 月 星期"的格式写一行,末尾跟命令。比如这两行,意思是每天凌晨2点清空目标应用的数据,每周一早上8点把手机里的备份目录拉到电脑:
0 2 * * * adb shell pm clear com.example.app 0 8 * * 1 adb pull /sdcard/backup/ ~/backup/写的时候有三个点容易翻车:
- 给 adb 写绝对路径。crontab 环境的 PATH 很精简,直接写
adb大概率找不到命令,要写全如/home/你的用户/platform-tools/adb - 命令末尾加上
>> /var/log/adb-cron.log 2>&1,把执行日志落盘,排查问题时全靠它 - 保存后跑一遍
crontab -l确认配置真的写进去了
涉及到的具体命令语义,比如pm clear会清空应用全部数据、pm list packages -3只列出第三方应用,项目 README 里都有逐条说明,拿不准时查一下再写进计划任务。
让截图脚本自己归档
定时截图是使用频率最高的需求之一。思路很朴素:截图时带上时间戳命名,拉到电脑,再删掉手机上的临时文件。写成一个小脚本:
ts=$(date +%Y%m%d_%H%M%S) adb shell screencap -p /sdcard/s_$ts.png adb pull /sdcard/s_$ts.png ~/Pictures/ adb shell rm /sdcard/s_$ts.png然后让 crontab 每隔半小时调用一次它,截图就会按时间自动归档,手机存储也不会越堆越多。
设备状态一变,自动做出响应
"定时"解决"什么时候做","条件触发"解决"什么时候该做"。套路都一样:周期性读取设备状态 → 判断是否越界 → 越界就执行预设动作。读状态这一步,dumpsys是主力,相关命令整理在项目的 related/dumpsys.md 里。
读电量,低于阈值就收手
电池信息藏在dumpsys battery输出的level字段里。用两行命令就能实现"电量低于15%时强制关闭耗电大户":
lvl=$(adb shell dumpsys battery | grep level | awk '{print $2}') [ "$lvl" -lt 15 ] && adb shell am force-stop com.example.heavyapp把这段放进 crontab 每5分钟跑一次,效果就接近"电量一低立刻响应",而且完全不需要 root。
判断WiFi,匹配就启动同步
想"连上公司网络才开始同步数据",先查网络状态再发指令即可:
adb shell dumpsys wifi | grep -q "SSID: myoffice" \ && adb shell am start -a android.intent.action.SYNC所有 ADB条件触发 都是这个骨架:dumpsys或getprop取状态,grep -q做判断,判断成立就接上执行命令。换个判断条件,就是另一套自动化。
处理多台设备和长时间任务
同时插着好几台手机时,必须用-s指定目标设备,否则命令不知道该发给谁:
adb -s emulator-5554 shell input keyevent KEYCODE_WAKEUP adb -s 192.168.1.20:5555 shell input keyevent KEYCODE_POWER这个参数还能玩设备间的链式配合,比如让 A 设备先锁屏、B 设备再亮屏,一行命令串起来,多台测试机协同就不用手动挨个点了。
另一种情况是任务本身要跑很久,比如30分钟的 Monkey 压测。这种任务别绑在前台终端上,用nohup丢到后台,终端关掉也不影响:
nohup sh -c 'adb shell monkey -p com.example.app 100000' \ > /tmp/monkey.log 2>&1 &⚠️ 避坑排错:定时任务最高频的3个问题
| 现象 | 最可能的原因 | 怎么解决 |
|---|---|---|
| crontab 任务压根没执行 | adb 不在 crontab 的默认 PATH 里 | 写 adb 绝对路径,并在命令末尾追加日志重定向 |
| 条件触发永远不命中 | 不同 ROM 的dumpsys输出字段有差异 | 先手动执行adb shell dumpsys battery看真实输出,再调整 grep 和 awk |
| 多台设备时命令跑错了手机 | 没指定-s参数 | 先adb devices确认序列号,每条命令都带上-s <序列号> |
还有一个经典坑:命令在终端里手动跑得好好的,放进脚本就失灵。九成是 PATH 或工作目录问题,脚本开头加一句echo $PATH基本就能定位。
把上面这些拼起来,开头那两件事就都交出去了:备份到点自己跑,电量低了自己处理。你的时间,可以留给更值得花时间的事。
【免费下载链接】awesome-adbADB Usage Complete / ADB 用法大全项目地址: https://gitcode.com/gh_mirrors/aw/awesome-adb
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考