ADB 工具全套工控实战:设备连接、日志抓取、文件推送、权限调试、重启刷机指令
adb 是工控开发者的瑞士军刀——不会玩 adb 的安卓工控开发,约等于不会用万用表的硬件工程师。今天咱们把 adb 从头到尾盘一遍,全是现场实战会用到的真东西。
一、adb 基本原理与连接方式
1.1 adb 架构
adb(Android Debug Bridge)是个 C/S 架构的工具,分为三部分:
- Client(PC 端):你在命令行敲的
adb命令,负责发送指令 - Server(PC 端后台进程):管理 Client 和 Daemon 之间的通信,端口 5037
- Daemon(设备端 adbd):跑在安卓设备上的守护进程,负责执行指令
一句话理解:PC 上的 adb client → adb server → USB/网络 → 设备上的 adbd → 执行操作。
1.2 USB 连接
最常用的方式,一条 USB 线解决。前提是设备开启了"USB 调试":
# 查看已连接设备adb devices# 输出示例List of devices attached 1234567890ABCDEF device如果显示unauthorized,说明设备上弹出了授权对话框,需要在设备屏幕上点"允许"。工控设备如果没有触摸屏怎么办?这就需要网络 adb。
1.3 网络 adb 连接
工控设备常用的远程调试方式,不需要 USB 线:
# 先通过 USB 连上,设置 adbd 监听 TCP 端口adb tcpip5555# 然后通过网络连接(假设设备 IP 是 192.168.1.100)adb connect192.168.1.100:5555# 拔掉 USB 线,网络调试继续生效adb devices# 192.168.1.100:5555 device工控实战场景:设备装在机柜里,你想拆 USB 线得把整个柜子拆开。直接网络 adb 连上,在工位上喝着茶就把问题调了。
断开连接:
adb disconnect192.168.1.100:5555二、常用设备管理命令
| 命令 | 用途 | 工控场景 |
|---|---|---|
adb devices | 列出所有连接设备 | 确认设备是否在线 |
adb connect IP:PORT | 网络连接设备 | 远程调试 |
adb disconnect IP:PORT | 断开网络连接 | 释放连接 |
adb -s SERIAL shell | 指定某台设备执行命令 | 多设备同时连接时指定 |
adb reboot | 重启设备 | 更新固件后重启 |
adb reboot recovery | 重启到 Recovery 模式 | 刷机 |
adb reboot bootloader | 重启到 Fastboot 模式 | 烧录 boot.img |
多设备管理:工控测试台上可能同时挂着三四台平板,这时候必须用-s指定设备:
adb devices# 192.168.1.100:5555 device# 192.168.1.101:5555 deviceadb-s192.168.1.100:5555 shell# 进入 100 这台adb-s192.168.1.101:5555 logcat# 看 101 的日志三、日志抓取实战:logcat 的工控用法
工控设备出问题,第一反应不是改代码,是抓日志。
3.1 基本过滤
原厂 logcat 输出是海量的,不加过滤等于没看:
# 只显示 Error 级别日志adb logcat *:E# 按 tag 过滤——只显示自己 APP 的日志adb logcat-sMyAppTag# 清除旧日志,从头开始看adb logcat-c&&adb logcat# 过滤多个 tagadb logcat MyServiceTag:D MyActivityTag:V *:S# D=Debug, V=Verbose, S=Silence(只显示明确指定的 tag)3.2 按进程/包名过滤
工控 APP 一般包名是固定的:
# 先通过包名找到 PIDadb shell pidof com.example.industrialcontrol# 只看这个进程的日志adb logcat--pid=123453.3 保存日志到文件
这是最常用的——设备在客户现场出问题,让客户帮忙抓个日志发回来:
# 抓取全部日志保存到文件adb logcat-d>d:/logs/factory_crash_20240301.txt# 只抓最近 500 行adb logcat-t500>d:/logs/latest.txt# 长时间录制日志(Ctrl+C 停止)adb logcat-vtime>d:/logs/long_run.txt参数说明:
| 参数 | 含义 |
|---|---|
-d | 输出后退出(dump 模式) |
-t N | 只输出最近 N 行 |
-v time | 显示时间戳 |
-v threadtime | 显示线程和时间(推荐) |
-f FILE | 直接写入设备本地文件 |
3.4 工控专用日志技巧
# 抓取内核日志(驱动问题必看)adb shelldmesg>d:/logs/kernel.log# 抓取 ANR 日志(APP 卡死无响应)adb shellls/data/anr/ adb pull /data/anr/anr_2024-03-01-10-30-00 ./anr_logs/# 抓取 tombstone(Native Crash,JNI 层崩溃)adb shellls/data/tombstones/ adb pull /data/tombstones/ ./tombstones/# 抓取系统启动日志(分析开机慢、服务启动失败)adb logcat-bevents-d>d:/logs/events.txt四、文件推送与拉取
工控设备的文件传输场景极多:推送更新包、拉取配置文件、导出数据库。
4.1 push:推送文件到设备
# 推送 APK 到设备adb push C:/build/app-debug.apk /sdcard/# 推送配置文件adb push C:/config/serial_config.json /sdcard/config/# 推送整个目录adb push C:/update_package /sdcard/update_package/# 推送到系统目录(需要 root)adb root adb remount adb push hosts /system/etc/hosts工控实战:现场升级不需要插 U 盘,直接 wifi 远程推送 APK,然后pm install静默装好——流水线不用停。
4.2 pull:从设备拉取文件
# 拉取日志adb pull /sdcard/logs/ ./local_logs/# 拉取数据库文件(调试数据问题)adb pull /data/data/com.example.app/databases/app.db ./# 拉取系统配置adb pull /system/build.prop ./4.3 安装与卸载
# 正常安装adbinstallapp-release.apk# 覆盖安装(保留数据)adbinstall-rapp-release.apk# 降级安装adbinstall-dapp-release.apk# 允许 testOnly 标记的包adbinstall-tapp-debug.apk# 卸载adb uninstall com.example.industrialcontrol工控常用组合拳——远程静默升级:
adb connect192.168.1.100:5555 adb push update.apk /sdcard/ adb shell pminstall-r/sdcard/update.apk adb shellrm/sdcard/update.apk adbreboot五、权限调试:shell 的深渊
adb shell是进入设备内部的入口。工控开发中 shell 的使用频率远高于手机开发。
5.1 基础操作
# 进入 shelladb shell# 执行单条命令不进入交互模式adb shellls-la/dev/ttyS* adb shellcat/proc/cpuinfo adb shell dumpsys battery# 查看电池(电源适配器)状态adb shell dumpsys meminfo com.example.app# 内存占用adb shelltop-n1# 进程资源占用5.2 su 提权
工控设备通常已 root,可以直接su:
adb shellsu# 现在你是 root 了,可以为所欲为# 修改文件权限chmod666/dev/ttyS1# 给串口设备读写权限chmod777/sys/class/gpio/export# 允许导出 GPIO# 修改系统属性setprop persist.sys.timezone Asia/Shanghai# 强制停止 APPam force-stop com.example.industrialcontrol# 启动 APPam start-ncom.example.industrialcontrol/.MainActivity5.3 SELinux 与权限问题
工控设备有时会遇到Permission denied,就算 root 也不行——这是 SELinux 在拦截:
# 查看 SELinux 状态adb shell getenforce# Enforcing = 拦截中# Permissive = 仅告警不拦截# 临时关闭(重启失效)adb shell setenforce0# 查看 SELinux 拒绝日志adb shelldmesg|grepavc六、重启与刷机指令
工控设备固件升级是家常便饭,这组命令必须烂熟于心。
# 普通重启adbreboot# 重启到 Recovery(刷机模式)adbrebootrecovery# 重启到 Bootloader(线刷模式)adbrebootbootloader# Fastboot 模式下的操作fastboot devices# 查看设备fastboot flash boot boot.img# 刷 boot 分区fastboot flash system system.img# 刷 system 分区fastboot flash recovery recovery.img fastbootreboot# 重启出 FastbootRKDevTool(瑞芯微工控常用):很多工控板子用的是瑞芯微方案,刷机不走 Fastboot,而是用RKDevTool工具通过Loader模式刷写。这种设备需要:
- 按住物理按键上电进入 MASKROM 模式
- PC 端用 RKDevTool 加载固件
- 一键烧录
七、实用 adb 技巧汇总表
| 场景 | 命令 | 备注 |
|---|---|---|
| 截图 | adb exec-out screencap -p > screen.png | 工控无屏设备远程截屏 |
| 录屏 | adb shell screenrecord /sdcard/demo.mp4 | Ctrl+C 停止,adb pull拉取 |
| 模拟按键 | adb shell input keyevent 26 | 26=电源键,3=Home,4=返回 |
| 模拟触摸 | adb shell input tap 500 300 | 模拟点击坐标 (500,300) |
| 获取分辨率 | adb shell wm size | 确认设备屏幕分辨率 |
| 获取 DPI | adb shell wm density | UI 适配需要 |
| 查看安装列表 | adb shell pm list packages | 加-3只看第三方 |
| 查看进程 | adb shell ps -A | grep com.example | 确认 APP 在后台是否活着 |
| 清除应用数据 | adb shell pm clear com.example.app | 相当于卸载重装 |
| 设置系统时间 | adb shell date 030110302024.00 | 格式:月日时分年.秒 |
| 无线投屏 | scrcpy | 开源工具,工控神器,无屏操作全靠它 |
八、总结
adb 这东西,说简单就简单——连上、敲命令、看结果。说深也深——内核日志、SELinux 策略、Fastboot 刷写,每一样都够你研究一阵的。
工控开发的日常,一半时间写代码,一半时间用 adb 在设备上摸排滚打。把这篇文章里的命令练熟了,你和设备之间的距离就差一条网线。