news 2026/11/3 19:04:38

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/11/3 19:04:13

熵债相图扫描流水线实现

# TAB013-G-003 / TAB013-G-004 合并流水线 # 约束钉死&#xff1a;8项合并校验规则全部落实 # 运行顺序&#xff1a;smoke -> smoke_meta写入 -> 主扫描 -> 锚点校验 -> 合并归档 -> 绘图 import numpy as np from scipy.integrate import solve_ivp from scip…

作者头像 李华
网站建设 2026/11/3 18:54:44

UVa 771 Flying Stars

题目描述 给定若干机场以及每日循环的航班信息。每个机场有固定的时区偏移和登机 / 转机耗时。从起点机场的某个本地时刻出发&#xff0c;需要经过一系列航班抵达终点机场。要求计算从出发时刻到抵达终点时刻的总旅行时间&#xff08;以天、小时、分钟表示&#xff09;&#xf…

作者头像 李华
网站建设 2026/11/3 18:54:40

UVa 792 Program Modules

题目描述 给定一个程序中的所有函数及其直接调用关系&#xff0c;定义关系 A→BA \rightarrow BA→B 表示函数 AAA 直接调用 BBB&#xff0c;A⇒BA \Rightarrow BA⇒B 表示 AAA 可传递地调用 BBB&#xff08;直接或间接&#xff09;。已知 →\rightarrow→ 是 ⇒\Rightarrow⇒ …

作者头像 李华
网站建设 2026/11/3 18:54:18

Github Copilot 智能编程辅助效果实测

在日常开发中&#xff0c;我们常常花费大量时间在重复性的代码编写上&#xff1a;从定义基础的数据结构&#xff0c;到为每个函数撰写繁琐的单元测试&#xff0c;再到面对一段陈旧的遗留代码时不知从何下手进行重构。这些机械劳动不仅消耗了开发者的精力&#xff0c;也拖慢了整…

作者头像 李华
网站建设 2026/11/3 18:53:27

Ponytail 项目落地指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华