本文是一份可直接复制命令使用 的 ADB 实战手册,覆盖:开发启动(环境、连接、模拟器)→ 开发过程(安装、文件、logcat、截图、端口/抓包)→ 开发结束(发版前归档)→ 测试(Monkey、批量测包、多机并行)→ Debug(logcat/dumpsys 进阶、排障)→ 自动化与组合命令打包 → CI/CD 中 adb 用法。车机、平板、机器人 IoT 等设备在项目中较常见,手册在「ADB 还能用在哪些场景」中单独列出其连接方式与常用命令。
目录
| 节 | 内容 |
|---|---|
| [ADB 还能用在哪些场景](#节 内容 ADB 还能用在哪些场景 车机、平板、机器人 IoT、Android TV、手表、Fire、Chrome OS、工控/自助终端、安全与自动化、取证等 0. 环境与安装 安装方式、PATH、Windows/macOS/Linux、验证 1. 日常调试 连接、模拟器、安装卸载、文件、logcat 基础、清除数据、无线调试、多设备、发版前归档 2. 截图与录屏 screencap、screenrecord 3. 包名、进程与权限 pm list packages、ps、dumpsys package、pm grant/revoke 4. 系统信息与属性 getprop、settings、dumpsys battery/diskstats 5. 应用生命周期 am start/force-stop/broadcast、Intent、清除数据 6. 自动化 input、uiautomator、测试场景、CI 中 adb 用法 7. 组合命令打包与一键运行 咋打包、.sh/.bat、示例脚本 8. 端口转发与代理 forward/reverse、抓包、与 IDE 调试配合 9. logcat 进阶 过滤、buffer、保存、按时间(基础见第 1 节) 10. dumpsys 常用 battery、meminfo、package、activity、cpuinfo 11. 排障与 FAQ 设备不显示、多设备、典型报错、RSA、常见问题 12. 速查表 按分类整表,便于快速复制 延伸与相关 scrcpy、logcat 格式、官方文档) | 车机、平板、机器人 IoT、Android TV、手表、Fire、Chrome OS、工控/自助终端、安全与自动化、取证等 |
| [0. 环境与安装](#节 内容 ADB 还能用在哪些场景 车机、平板、机器人 IoT、Android TV、手表、Fire、Chrome OS、工控/自助终端、安全与自动化、取证等 0. 环境与安装 安装方式、PATH、Windows/macOS/Linux、验证 1. 日常调试 连接、模拟器、安装卸载、文件、logcat 基础、清除数据、无线调试、多设备、发版前归档 2. 截图与录屏 screencap、screenrecord 3. 包名、进程与权限 pm list packages、ps、dumpsys package、pm grant/revoke 4. 系统信息与属性 getprop、settings、dumpsys battery/diskstats 5. 应用生命周期 am start/force-stop/broadcast、Intent、清除数据 6. 自动化 input、uiautomator、测试场景、CI 中 adb 用法 7. 组合命令打包与一键运行 咋打包、.sh/.bat、示例脚本 8. 端口转发与代理 forward/reverse、抓包、与 IDE 调试配合 9. logcat 进阶 过滤、buffer、保存、按时间(基础见第 1 节) 10. dumpsys 常用 battery、meminfo、package、activity、cpuinfo 11. 排障与 FAQ 设备不显示、多设备、典型报错、RSA、常见问题 12. 速查表 按分类整表,便于快速复制 延伸与相关 scrcpy、logcat 格式、官方文档) | 安装方式、PATH、Windows/macOS/Linux、验证 |
| [1. 日常调试](#节 内容 ADB 还能用在哪些场景 车机、平板、机器人 IoT、Android TV、手表、Fire、Chrome OS、工控/自助终端、安全与自动化、取证等 0. 环境与安装 安装方式、PATH、Windows/macOS/Linux、验证 1. 日常调试 连接、模拟器、安装卸载、文件、logcat 基础、清除数据、无线调试、多设备、发版前归档 2. 截图与录屏 screencap、screenrecord 3. 包名、进程与权限 pm list packages、ps、dumpsys package、pm grant/revoke 4. 系统信息与属性 getprop、settings、dumpsys battery/diskstats 5. 应用生命周期 am start/force-stop/broadcast、Intent、清除数据 6. 自动化 input、uiautomator、测试场景、CI 中 adb 用法 7. 组合命令打包与一键运行 咋打包、.sh/.bat、示例脚本 8. 端口转发与代理 forward/reverse、抓包、与 IDE 调试配合 9. logcat 进阶 过滤、buffer、保存、按时间(基础见第 1 节) 10. dumpsys 常用 battery、meminfo、package、activity、cpuinfo 11. 排障与 FAQ 设备不显示、多设备、典型报错、RSA、常见问题 12. 速查表 按分类整表,便于快速复制 延伸与相关 scrcpy、logcat 格式、官方文档) | 连接、模拟器、安装卸载、文件、logcat 基础、清除数据、无线调试、多设备、发版前归档 |
| [2. 截图与录屏](#节 内容 ADB 还能用在哪些场景 车机、平板、机器人 IoT、Android TV、手表、Fire、Chrome OS、工控/自助终端、安全与自动化、取证等 0. 环境与安装 安装方式、PATH、Windows/macOS/Linux、验证 1. 日常调试 连接、模拟器、安装卸载、文件、logcat 基础、清除数据、无线调试、多设备、发版前归档 2. 截图与录屏 screencap、screenrecord 3. 包名、进程与权限 pm list packages、ps、dumpsys package、pm grant/revoke 4. 系统信息与属性 getprop、settings、dumpsys battery/diskstats 5. 应用生命周期 am start/force-stop/broadcast、Intent、清除数据 6. 自动化 input、uiautomator、测试场景、CI 中 adb 用法 7. 组合命令打包与一键运行 咋打包、.sh/.bat、示例脚本 8. 端口转发与代理 forward/reverse、抓包、与 IDE 调试配合 9. logcat 进阶 过滤、buffer、保存、按时间(基础见第 1 节) 10. dumpsys 常用 battery、meminfo、package、activity、cpuinfo 11. 排障与 FAQ 设备不显示、多设备、典型报错、RSA、常见问题 12. 速查表 按分类整表,便于快速复制 延伸与相关 scrcpy、logcat 格式、官方文档) | screencap、screenrecord |
| [3. 包名、进程与权限](#节 内容 ADB 还能用在哪些场景 车机、平板、机器人 IoT、Android TV、手表、Fire、Chrome OS、工控/自助终端、安全与自动化、取证等 0. 环境与安装 安装方式、PATH、Windows/macOS/Linux、验证 1. 日常调试 连接、模拟器、安装卸载、文件、logcat 基础、清除数据、无线调试、多设备、发版前归档 2. 截图与录屏 screencap、screenrecord 3. 包名、进程与权限 pm list packages、ps、dumpsys package、pm grant/revoke 4. 系统信息与属性 getprop、settings、dumpsys battery/diskstats 5. 应用生命周期 am start/force-stop/broadcast、Intent、清除数据 6. 自动化 input、uiautomator、测试场景、CI 中 adb 用法 7. 组合命令打包与一键运行 咋打包、.sh/.bat、示例脚本 8. 端口转发与代理 forward/reverse、抓包、与 IDE 调试配合 9. logcat 进阶 过滤、buffer、保存、按时间(基础见第 1 节) 10. dumpsys 常用 battery、meminfo、package、activity、cpuinfo 11. 排障与 FAQ 设备不显示、多设备、典型报错、RSA、常见问题 12. 速查表 按分类整表,便于快速复制 延伸与相关 scrcpy、logcat 格式、官方文档) | pm list packages、ps、dumpsys package、pm grant/revoke |
| [4. 系统信息与属性](#节 内容 ADB 还能用在哪些场景 车机、平板、机器人 IoT、Android TV、手表、Fire、Chrome OS、工控/自助终端、安全与自动化、取证等 0. 环境与安装 安装方式、PATH、Windows/macOS/Linux、验证 1. 日常调试 连接、模拟器、安装卸载、文件、logcat 基础、清除数据、无线调试、多设备、发版前归档 2. 截图与录屏 screencap、screenrecord 3. 包名、进程与权限 pm list packages、ps、dumpsys package、pm grant/revoke 4. 系统信息与属性 getprop、settings、dumpsys battery/diskstats 5. 应用生命周期 am start/force-stop/broadcast、Intent、清除数据 6. 自动化 input、uiautomator、测试场景、CI 中 adb 用法 7. 组合命令打包与一键运行 咋打包、.sh/.bat、示例脚本 8. 端口转发与代理 forward/reverse、抓包、与 IDE 调试配合 9. logcat 进阶 过滤、buffer、保存、按时间(基础见第 1 节) 10. dumpsys 常用 battery、meminfo、package、activity、cpuinfo 11. 排障与 FAQ 设备不显示、多设备、典型报错、RSA、常见问题 12. 速查表 按分类整表,便于快速复制 延伸与相关 scrcpy、logcat 格式、官方文档) | getprop、settings、dumpsys battery/diskstats |
| [5. 应用生命周期](#节 内容 ADB 还能用在哪些场景 车机、平板、机器人 IoT、Android TV、手表、Fire、Chrome OS、工控/自助终端、安全与自动化、取证等 0. 环境与安装 安装方式、PATH、Windows/macOS/Linux、验证 1. 日常调试 连接、模拟器、安装卸载、文件、logcat 基础、清除数据、无线调试、多设备、发版前归档 2. 截图与录屏 screencap、screenrecord 3. 包名、进程与权限 pm list packages、ps、dumpsys package、pm grant/revoke 4. 系统信息与属性 getprop、settings、dumpsys battery/diskstats 5. 应用生命周期 am start/force-stop/broadcast、Intent、清除数据 6. 自动化 input、uiautomator、测试场景、CI 中 adb 用法 7. 组合命令打包与一键运行 咋打包、.sh/.bat、示例脚本 8. 端口转发与代理 forward/reverse、抓包、与 IDE 调试配合 9. logcat 进阶 过滤、buffer、保存、按时间(基础见第 1 节) 10. dumpsys 常用 battery、meminfo、package、activity、cpuinfo 11. 排障与 FAQ 设备不显示、多设备、典型报错、RSA、常见问题 12. 速查表 按分类整表,便于快速复制 延伸与相关 scrcpy、logcat 格式、官方文档) | am start/force-stop/broadcast、Intent、清除数据 |
| [6. 自动化](#节 内容 ADB 还能用在哪些场景 车机、平板、机器人 IoT、Android TV、手表、Fire、Chrome OS、工控/自助终端、安全与自动化、取证等 0. 环境与安装 安装方式、PATH、Windows/macOS/Linux、验证 1. 日常调试 连接、模拟器、安装卸载、文件、logcat 基础、清除数据、无线调试、多设备、发版前归档 2. 截图与录屏 screencap、screenrecord 3. 包名、进程与权限 pm list packages、ps、dumpsys package、pm grant/revoke 4. 系统信息与属性 getprop、settings、dumpsys battery/diskstats 5. 应用生命周期 am start/force-stop/broadcast、Intent、清除数据 6. 自动化 input、uiautomator、测试场景、CI 中 adb 用法 7. 组合命令打包与一键运行 咋打包、.sh/.bat、示例脚本 8. 端口转发与代理 forward/reverse、抓包、与 IDE 调试配合 9. logcat 进阶 过滤、buffer、保存、按时间(基础见第 1 节) 10. dumpsys 常用 battery、meminfo、package、activity、cpuinfo 11. 排障与 FAQ 设备不显示、多设备、典型报错、RSA、常见问题 12. 速查表 按分类整表,便于快速复制 延伸与相关 scrcpy、logcat 格式、官方文档) | input、uiautomator、测试场景、CI 中 adb 用法 |
| [7. 组合命令打包与一键运行](#节 内容 ADB 还能用在哪些场景 车机、平板、机器人 IoT、Android TV、手表、Fire、Chrome OS、工控/自助终端、安全与自动化、取证等 0. 环境与安装 安装方式、PATH、Windows/macOS/Linux、验证 1. 日常调试 连接、模拟器、安装卸载、文件、logcat 基础、清除数据、无线调试、多设备、发版前归档 2. 截图与录屏 screencap、screenrecord 3. 包名、进程与权限 pm list packages、ps、dumpsys package、pm grant/revoke 4. 系统信息与属性 getprop、settings、dumpsys battery/diskstats 5. 应用生命周期 am start/force-stop/broadcast、Intent、清除数据 6. 自动化 input、uiautomator、测试场景、CI 中 adb 用法 7. 组合命令打包与一键运行 咋打包、.sh/.bat、示例脚本 8. 端口转发与代理 forward/reverse、抓包、与 IDE 调试配合 9. logcat 进阶 过滤、buffer、保存、按时间(基础见第 1 节) 10. dumpsys 常用 battery、meminfo、package、activity、cpuinfo 11. 排障与 FAQ 设备不显示、多设备、典型报错、RSA、常见问题 12. 速查表 按分类整表,便于快速复制 延伸与相关 scrcpy、logcat 格式、官方文档) | 咋打包、.sh/.bat、示例脚本 |
| [8. 端口转发与代理](#节 内容 ADB 还能用在哪些场景 车机、平板、机器人 IoT、Android TV、手表、Fire、Chrome OS、工控/自助终端、安全与自动化、取证等 0. 环境与安装 安装方式、PATH、Windows/macOS/Linux、验证 1. 日常调试 连接、模拟器、安装卸载、文件、logcat 基础、清除数据、无线调试、多设备、发版前归档 2. 截图与录屏 screencap、screenrecord 3. 包名、进程与权限 pm list packages、ps、dumpsys package、pm grant/revoke 4. 系统信息与属性 getprop、settings、dumpsys battery/diskstats 5. 应用生命周期 am start/force-stop/broadcast、Intent、清除数据 6. 自动化 input、uiautomator、测试场景、CI 中 adb 用法 7. 组合命令打包与一键运行 咋打包、.sh/.bat、示例脚本 8. 端口转发与代理 forward/reverse、抓包、与 IDE 调试配合 9. logcat 进阶 过滤、buffer、保存、按时间(基础见第 1 节) 10. dumpsys 常用 battery、meminfo、package、activity、cpuinfo 11. 排障与 FAQ 设备不显示、多设备、典型报错、RSA、常见问题 12. 速查表 按分类整表,便于快速复制 延伸与相关 scrcpy、logcat 格式、官方文档) | forward/reverse、抓包、与 IDE 调试配合 |
| [9. logcat 进阶](#节 内容 ADB 还能用在哪些场景 车机、平板、机器人 IoT、Android TV、手表、Fire、Chrome OS、工控/自助终端、安全与自动化、取证等 0. 环境与安装 安装方式、PATH、Windows/macOS/Linux、验证 1. 日常调试 连接、模拟器、安装卸载、文件、logcat 基础、清除数据、无线调试、多设备、发版前归档 2. 截图与录屏 screencap、screenrecord 3. 包名、进程与权限 pm list packages、ps、dumpsys package、pm grant/revoke 4. 系统信息与属性 getprop、settings、dumpsys battery/diskstats 5. 应用生命周期 am start/force-stop/broadcast、Intent、清除数据 6. 自动化 input、uiautomator、测试场景、CI 中 adb 用法 7. 组合命令打包与一键运行 咋打包、.sh/.bat、示例脚本 8. 端口转发与代理 forward/reverse、抓包、与 IDE 调试配合 9. logcat 进阶 过滤、buffer、保存、按时间(基础见第 1 节) 10. dumpsys 常用 battery、meminfo、package、activity、cpuinfo 11. 排障与 FAQ 设备不显示、多设备、典型报错、RSA、常见问题 12. 速查表 按分类整表,便于快速复制 延伸与相关 scrcpy、logcat 格式、官方文档) | 过滤、buffer、保存、按时间(基础见第 1 节) |
| [10. dumpsys 常用](#节 内容 ADB 还能用在哪些场景 车机、平板、机器人 IoT、Android TV、手表、Fire、Chrome OS、工控/自助终端、安全与自动化、取证等 0. 环境与安装 安装方式、PATH、Windows/macOS/Linux、验证 1. 日常调试 连接、模拟器、安装卸载、文件、logcat 基础、清除数据、无线调试、多设备、发版前归档 2. 截图与录屏 screencap、screenrecord 3. 包名、进程与权限 pm list packages、ps、dumpsys package、pm grant/revoke 4. 系统信息与属性 getprop、settings、dumpsys battery/diskstats 5. 应用生命周期 am start/force-stop/broadcast、Intent、清除数据 6. 自动化 input、uiautomator、测试场景、CI 中 adb 用法 7. 组合命令打包与一键运行 咋打包、.sh/.bat、示例脚本 8. 端口转发与代理 forward/reverse、抓包、与 IDE 调试配合 9. logcat 进阶 过滤、buffer、保存、按时间(基础见第 1 节) 10. dumpsys 常用 battery、meminfo、package、activity、cpuinfo 11. 排障与 FAQ 设备不显示、多设备、典型报错、RSA、常见问题 12. 速查表 按分类整表,便于快速复制 延伸与相关 scrcpy、logcat 格式、官方文档) | battery、meminfo、package、activity、cpuinfo |
| [11. 排障与 FAQ](#节 内容 ADB 还能用在哪些场景 车机、平板、机器人 IoT、Android TV、手表、Fire、Chrome OS、工控/自助终端、安全与自动化、取证等 0. 环境与安装 安装方式、PATH、Windows/macOS/Linux、验证 1. 日常调试 连接、模拟器、安装卸载、文件、logcat 基础、清除数据、无线调试、多设备、发版前归档 2. 截图与录屏 screencap、screenrecord 3. 包名、进程与权限 pm list packages、ps、dumpsys package、pm grant/revoke 4. 系统信息与属性 getprop、settings、dumpsys battery/diskstats 5. 应用生命周期 am start/force-stop/broadcast、Intent、清除数据 6. 自动化 input、uiautomator、测试场景、CI 中 adb 用法 7. 组合命令打包与一键运行 咋打包、.sh/.bat、示例脚本 8. 端口转发与代理 forward/reverse、抓包、与 IDE 调试配合 9. logcat 进阶 过滤、buffer、保存、按时间(基础见第 1 节) 10. dumpsys 常用 battery、meminfo、package、activity、cpuinfo 11. 排障与 FAQ 设备不显示、多设备、典型报错、RSA、常见问题 12. 速查表 按分类整表,便于快速复制 延伸与相关 scrcpy、logcat 格式、官方文档) | 设备不显示、多设备、典型报错、RSA、常见问题 |
| [12. 速查表](#节 内容 ADB 还能用在哪些场景 车机、平板、机器人 IoT、Android TV、手表、Fire、Chrome OS、工控/自助终端、安全与自动化、取证等 0. 环境与安装 安装方式、PATH、Windows/macOS/Linux、验证 1. 日常调试 连接、模拟器、安装卸载、文件、logcat 基础、清除数据、无线调试、多设备、发版前归档 2. 截图与录屏 screencap、screenrecord 3. 包名、进程与权限 pm list packages、ps、dumpsys package、pm grant/revoke 4. 系统信息与属性 getprop、settings、dumpsys battery/diskstats 5. 应用生命周期 am start/force-stop/broadcast、Intent、清除数据 6. 自动化 input、uiautomator、测试场景、CI 中 adb 用法 7. 组合命令打包与一键运行 咋打包、.sh/.bat、示例脚本 8. 端口转发与代理 forward/reverse、抓包、与 IDE 调试配合 9. logcat 进阶 过滤、buffer、保存、按时间(基础见第 1 节) 10. dumpsys 常用 battery、meminfo、package、activity、cpuinfo 11. 排障与 FAQ 设备不显示、多设备、典型报错、RSA、常见问题 12. 速查表 按分类整表,便于快速复制 延伸与相关 scrcpy、logcat 格式、官方文档) | 按分类整表,便于快速复制 |
| [延伸与相关](#节 内容 ADB 还能用在哪些场景 车机、平板、机器人 IoT、Android TV、手表、Fire、Chrome OS、工控/自助终端、安全与自动化、取证等 0. 环境与安装 安装方式、PATH、Windows/macOS/Linux、验证 1. 日常调试 连接、模拟器、安装卸载、文件、logcat 基础、清除数据、无线调试、多设备、发版前归档 2. 截图与录屏 screencap、screenrecord 3. 包名、进程与权限 pm list packages、ps、dumpsys package、pm grant/revoke 4. 系统信息与属性 getprop、settings、dumpsys battery/diskstats 5. 应用生命周期 am start/force-stop/broadcast、Intent、清除数据 6. 自动化 input、uiautomator、测试场景、CI 中 adb 用法 7. 组合命令打包与一键运行 咋打包、.sh/.bat、示例脚本 8. 端口转发与代理 forward/reverse、抓包、与 IDE 调试配合 9. logcat 进阶 过滤、buffer、保存、按时间(基础见第 1 节) 10. dumpsys 常用 battery、meminfo、package、activity、cpuinfo 11. 排障与 FAQ 设备不显示、多设备、典型报错、RSA、常见问题 12. 速查表 按分类整表,便于快速复制 延伸与相关 scrcpy、logcat 格式、官方文档) | scrcpy、logcat 格式、官方文档 |
ADB 还能用在哪些场景
除手机上的安卓开发与测试 外,ADB 还常用于车机、平板、机器人 IoT 以及以下场景。连接与常用命令(adb devices、install、logcat、pull/push 等)与手机一致,差异主要在连接方式 和设备开启调试的入口;下文按场景说明注意点与典型用法。
Android TV / 电视盒子
| 要点 | 说明 |
|---|---|
| 适用 | 智能电视、机顶盒(Android TV 或厂商定制 Android),装第三方 APK、调试预装/自装应用、抓日志。 |
| 连接 | 多数无 USB 口,用无线 adb :电视与电脑同网,在电视「设置 → 关于 → 连续点版本号」打开开发者选项,开启「网络调试」或「ADB 调试」,记下 IP:端口,电脑执行 adb connect <IP>:5555(端口以设备显示为准)。部分盒子有 USB,需打开「USB 调试」。 |
| 常用 | 安装 APK:adb install -r app.apk;查看前台:`adb shell dumpsys activity activities |
bash
# 电视/盒子无线连接(将 IP 和端口换成设备显示)
adb connect 192.168.1.100:5555
adb devices
adb -s 192.168.1.100:5555 install -r myapp.apk
Wear OS / 智能手表
| 要点 | 说明 |
|---|---|
| 适用 | 为手表开发/调试应用、装测试包、看 logcat、传文件。 |
| 连接 | 多数通过手机中转 :手机与手表配对,手机装「Wear OS 伴侣」等,在伴侣/开发者设置中开启「通过蓝牙调试」;电脑通过 USB 连手机,用 adb forward 或厂商工具连到手表。部分表支持 USB 底座或 Type-C 直连电脑。 |
| 常用 | 与手机相同;注意屏幕小、分辨率不同,screencap/input 坐标需按实际分辨率。 |
Fire TV / Fire 平板(Amazon Fire OS)
| 要点 | 说明 |
|---|---|
| 适用 | Fire OS 基于 Android,adb 可** sideload 应用**、装 F-Droid/其他商店、调试、抓包。 |
| 连接 | 无线 :设备「设置 → 我的设备 → 关于 → 连续点版本号」打开开发者选项,开启「ADB 调试」与「从网络上的电脑连接」,记下 IP,电脑 adb connect <IP>:5555。USB 需对应线缆(部分 Fire 设备为 Micro-USB)。 |
| 注意 | 系统可能限制部分权限或预装检测,与原生 Android 略有差异;pm grant 等以实际设备为准。 |
bash
# Fire 设备无线连接
adb connect <Fire设备IP>:5555
adb install -r app.apk
Chrome OS(Chromebook 上的 Android 应用)
| 要点 | 说明 |
|---|---|
| 适用 | Chromebook 内置 Android 容器,可调试容器内 Android 应用、安装 APK、查看 logcat。 |
| 连接 | 开发者模式 + Linux 环境:Chromebook 开启开发者模式后,在 Linux(Crostini)里安装 adb,通过 adb connect 100.115.92.2:5555 连接本机 Android 容器(该 IP 为 Chrome OS 常见容器地址,以系统文档为准)。部分机型需在「设置 → 开发者选项」中开启 Android 调试。 |
| 常用 | 与手机一致;容器与 Linux 共享部分网络,注意端口与防火墙。 |
车载 / 车机(Android Automotive 或定制 Android)
| 要点 | 说明 |
|---|---|
| 适用 | 车机开发、预装/后装应用调试、日志采集、OTA 前后对比、问题复现与抓包。 |
| 连接 | USB :中控有 USB 口时,开启「开发者选项 → USB 调试」后连接。无线 :车机与电脑同网(Wi-Fi 或热点),开启网络 ADB,电脑 adb connect <车机IP>:5555。部分车型需工程模式或厂商工具才能开调试。 |
| 注意 | 行车中勿操作调试;部分车企限制 adb 或需授权证书。 |
车机:如何打开开发者选项 / 网络 ADB
- 多数车机:设置 → 关于/系统信息 → 连续点击「版本号」或「构建号」多次,返回后出现「开发者选项」;进入后开启「USB 调试」,若支持则开启「网络 ADB」或「无线调试」。
- 部分车型:需进入工程模式(如特定组合键、诊断口、厂商工具)才能开启 adb;IP 与端口以车机「网络 ADB」界面显示为准,常见端口 5555。
- 无线连接时:车机连手机热点或与电脑同一 WiFi,在车机设置中查看「IP 地址」或「网络 ADB」页显示的 IP:端口。
车机常用命令与场景
bash
# 连接后确认设备与系统版本
adb devices -l
adb shell getprop ro.build.version.release
adb shell getprop ro.product.model
# 安装/覆盖安装车机应用(后装 APK)
adb install -r -d launcher.apk
# 发版前或问题复现:抓一段 logcat 归档(可配合 repro 步骤)
adb logcat -c && adb logcat -v threadtime > car_log_$(date +%Y%m%d_%H%M%S).txt
# 拉取车机上已安装的 APK(用于与构建对比)
adb shell pm path <车机应用包名>
adb pull <上一条输出路径去掉 package:> ./
# 查看当前前台 Activity(确认是否进入目标界面)
adb shell dumpsys activity activities | grep -E "mResumed|mFocusedApp"
# 清除某应用数据后重试(如导航、媒体应用)
adb shell pm clear <包名>
车机注意
- 行车中禁止操作调试与看日志,建议车辆静止或由副驾/测试员操作。
- 部分车企锁 bootloader、关闭 adb 或仅白名单证书可连,需按厂商开发流程申请。
- OTA 前后可分别抓 logcat、
dumpsys、应用版本,便于对比问题。
平板(Android 平板)
| 要点 | 说明 |
|---|---|
| 适用 | 大屏适配与横竖屏调试、多用户(主户/子户)安装与数据隔离、平板专属 UI、与手机同包名不同资源。 |
| 连接 | 与手机相同:USB 开启「开发者选项 → USB 调试」后连接;无线 见 [1.7 无线调试](#要点 说明 适用 大屏适配与横竖屏调试、多用户(主户/子户)安装与数据隔离、平板专属 UI、与手机同包名不同资源。 连接 与手机相同:USB 开启「开发者选项 → USB 调试」后连接;无线 见 1.7 无线调试 或 adb tcpip 5555 后 adb connect <平板IP>:5555。 常用 多用户时用 --user <id> 安装/清除;查分辨率与 DPI 做适配;截图/录屏验证大屏布局。) 或 adb tcpip 5555 后 adb connect <平板IP>:5555。 |
| 常用 | 多用户时用 --user <id> 安装/清除;查分辨率与 DPI 做适配;截图/录屏验证大屏布局。 |
平板常用命令
bash
# 查看当前用户(多用户平板)
adb shell am get-current-user
# 指定用户安装(0 一般为主用户)
adb install --user 0 -r app.apk
# 查看分辨率与 DPI(大屏适配参考)
adb shell wm size
adb shell wm density
# 清除指定用户下某应用数据
adb shell pm clear --user 0 <包名>
# 横竖屏、分屏等与手机相同,可用 logcat / dumpsys 排查
IoT / 工控机 / 自助终端 / 机器人(Android 系统)
| 要点 | 说明 |
|---|---|
| 适用 | 机器人 (服务机器人、配送机器人、工业机械臂等搭载 Android 的主控)、工控板、自助售货机、排队机、广告屏、闸机等:远程运维、批量装/升级应用、拉日志排查、脚本自动化、无屏/无键设备调试。 |
| 连接 | 有网口时通过以太网 ,无网口或移动场景多用 Wi-Fi :设备与电脑同网,开启 adbd 监听 5555,电脑 adb connect <设备IP>:5555。机器人/无屏设备常需首次 USB 或串口开启「网络 ADB」或执行 adb tcpip 5555 后拔线。 |
| 常用 | 批量安装/升级、按 IP 拉 logcat、远程重启、远程截图;机器人上 adb 管系统与上层应用,底盘/传感器等协议由设备厂商 SDK 或串口/其他通道处理。 |
机器人 / IoT:如何让设备可被 adb 连接
- 出厂/系统设置 :很多工控板在「设置 → 开发者选项」中可开「USB 调试」和「网络 ADB」;无屏设备常通过串口或首次 USB 连接进入设置,或由预装脚本在启动时执行
setprop service.adb.tcp.port 5555+ 重启 adbd。 - 网络:设备与电脑需同网段(如 192.168.1.x);若设备为 DHCP 获取 IP,需在路由器或设备端确认 IP,或扫描网段端口 5555 发现设备。
- 防火墙:确保设备未禁止 5555 端口;电脑防火墙允许 adb 或出站 5555。
IoT 常用命令与脚本
bash
# 单台:连接、安装、拉日志
adb connect 192.168.1.101:5555
adb -s 192.168.1.101:5555 install -r app.apk
adb -s 192.168.1.101:5555 logcat -d -v threadtime > log_101.txt
# 多台(同网段)批量安装同一 APK
for ip in 192.168.1.101 192.168.1.102 192.168.1.103; do
adb connect $ip:5555
adb -s ${ip}:5555 install -r app.apk
echo "done $ip"
done
# 多台批量拉 logcat 到本地(按 IP 命名)
for ip in 192.168.1.101 192.168.1.102; do
adb connect $ip:5555 2>/dev/null
adb -s ${ip}:5555 logcat -d -v threadtime > log_${ip}.txt 2>/dev/null && echo "pulled $ip"
done
# 远程重启设备(需系统允许)
adb -s 192.168.1.101:5555 shell reboot
# 无屏/广告屏:远程截图排查界面(先 pull 到电脑再看)
adb -s 192.168.1.101:5555 exec-out screencap -p > screen_101.png
# 查看设备 API、型号(批量升级前核对兼容性)
adb -s 192.168.1.101:5555 shell getprop ro.build.version.sdk
adb -s 192.168.1.101:5555 shell getprop ro.product.model
机器人 / IoT 注意
- 机器人:多数通过 WiFi 或以太网连同一网段,IP 由机器人系统设置或厂商工具查看;无屏时用 adb 装应用、拉 logcat、截图(若有屏)即可,业务逻辑与底盘/导航等通常由厂商 API 或其它进程负责。
- 批量操作时建议加超时 与失败重试 (如
timeout 60 adb install -r app.apk),避免某台无响应拖死脚本。 - 设备断电或重启后,若未配置「开机自启 adbd 监听 5555」,需再次 USB 连一次执行
adb tcpip 5555或通过串口/其他通道开启。 - 生产环境注意安全:限制 adb 仅内网可达、改默认端口、或通过 VPN/跳板机访问,避免 adb 暴露公网。
安全研究 / 逆向分析
| 要点 | 说明 |
|---|---|
| 适用 | 分析应用行为、抓包、脱壳、权限与组件审计等;需在合法授权前提下进行。 |
| 连接 | 真机或模拟器均可;真机建议专用测试机、不登录个人账号。 |
| 常用 | adb shell pm path <包名> 取 APK 路径后 pull;adb logcat 看行为;adb forward/adb reverse 配合 Charles/Fiddler 抓包;run-as 或 root 后读 /data/data/<包名>/。 |
个人自动化(非开发/测试用途)
| 要点 | 说明 |
|---|---|
| 适用 | 用脚本在自己的设备上做批量操作:定时备份相册/文件、批量装/卸应用、自动化点击(需配合 accessibility 或 root,视场景而定)。 |
| 连接 | USB 或无线 adb,同手机。 |
| 注意 | 长时间自动化可能触发系统省电或杀后台;部分操作需 root 或「修改安全设置」权限。 |
取证与数据提取
| 要点 | 说明 |
|---|---|
| 适用 | 在合法授权下(如司法、企业合规),通过 adb 配合专业工具做设备数据提取、应用数据备份、日志固定等。 |
| 连接 | 通常 USB;取证前需确认设备已授权 adb 且未清数据。 |
| 注意 | 取证流程、证据固定需符合当地法律与规范;adb 仅作技术手段之一,完整流程应由专业取证工具与规程保证。 |
0. 环境与安装
0.1 安装方式
- Android SDK Platform-Tools (推荐):含
adb、fastboot等,与 IDE 共用一套即可。 - 独立 adb :仅需命令行时,可只下载 Platform-Tools 解压使用。
安装后把解压目录下的 platform-tools(或含 adb 的目录)加入系统 PATH ,终端中执行 adb version 能输出版本即成功。
0.2 各平台安装与 PATH
Windows
- 从 SDK Platform-Tools 下载 zip,解压到例如
C:\platform-tools。 - 将
C:\platform-tools加入环境变量 PATH(系统属性 → 环境变量 → Path → 新建)。 - 或通过 Android Studio:SDK Manager → SDK Tools → 勾选 Android SDK Platform-Tools → 安装,PATH 一般为
%LOCALAPPDATA%\Android\Sdk\platform-tools。
powershell
# 验证(PowerShell / CMD)
adb version
macOS
- 使用 Homebrew:
brew install android-platform-tools,或下载 SDK Platform-Tools 解压并将platform-tools目录加入 PATH。
bash
# 验证
adb version
Linux
- 部分发行版:
sudo apt install android-tools-adb(Ubuntu/Debian)或sudo dnf install android-tools(Fedora)。 - 或下载 Platform-Tools 解压并加入 PATH。
bash
# 验证
adb version
0.3 验证与版本
bash
# 查看 adb 版本与路径
adb version
# 查看已连接设备(需先连设备并开启 USB 调试)
adb devices
- 版本兼容 :adb 过旧可能无法连接新版 Android 或缺少新特性(如无线配对);建议使用较新的 Platform-Tools。
- 若使用 Magisk/root:部分操作需
adb root或adb shell su,设备需已 root;生产环境慎用。
1. 日常调试
1.1 连接与列表
怎么连接
- USB:用数据线将手机/平板与电脑连接;在设备上打开「设置 → 关于手机 → 连续点版本号」打开开发者选项,再在「设置 → 系统 → 开发者选项」中开启「USB 调试」;首次连接时设备会弹出「允许 USB 调试?」点「允许」。
- 无线 :见下文 [1.7 无线调试](#1.7 无线调试)(Android 11+ 配对码;同节内另有 USB 连一次后
adb tcpip 5555再拔线无线连)。 - 连接后可在电脑终端执行下面命令确认设备已识别。
bash
# 列出已连接设备(含模拟器)
adb devices
# 输出说明:device 表示已授权,unauthorized 表示未点「允许」,offline 表示异常需重连
adb devices -l
# 重启 adb 服务(设备列表异常时)
adb kill-server
adb start-server
adb devices
1.2 模拟器启动与连接
bash
# 列出当前已启动的 AVD(模拟器)
emulator -list-avds
# 启动指定 AVD(在 SDK 的 emulator 目录下执行,或把 emulator 加入 PATH)
emulator -avd <AVD名称> -no-snapshot-load
# 启动并指定端口(便于多开时用 -s 连接)
emulator -avd <AVD名称> -port 5556
# 多开时:第一个默认 5554,第二个 5556,依此类推;连接时用
adb -s emulator-5554 shell ...
adb -s emulator-5556 shell ...
模拟器启动后,adb devices 会显示 emulator-5554 等;若只装了一个模拟器且只开一个,可直接 adb shell 不指定 -s。
1.3 安装与卸载 APK
开发完 APK 后安装到设备
- 构建产物路径 (Android Studio / Gradle 默认):
- Debug:
<项目>/app/build/outputs/apk/debug/app-debug.apk - Release:
<项目>/app/build/outputs/apk/release/app-release.apk(或带签名的变体名)
- Debug:
- 推荐命令 :覆盖安装(保留数据)用
-r;若新版本号低于已装版本需加-d允许降级;多设备用-s <设备>。
bash
# 开发/调试常用:装 debug 包并覆盖旧版
adb install -r app/build/outputs/apk/debug/app-debug.apk
# 多设备时指定设备(如连接了真机+模拟器)
adb -s emulator-5554 install -r app/build/outputs/apk/debug/app-debug.apk
# 允许降级安装(如回退到旧版测问题)
adb install -r -d app/build/outputs/apk/debug/app-debug.apk
# 安装后直接启动应用(包名与主 Activity 换成自己的)
adb install -r app-debug.apk && adb shell am start -n <包名>/<主Activity>
- 常见安装失败 :签名不一致导致覆盖失败 → 先
adb uninstall <包名>再装,或用-r且保证签名一致;版本更低被拒 → 加-d;空间不足 → 清理设备存储或卸载不用的应用。
下面为通用 install / uninstall 用法(任意 APK 与设备均适用)。
通用安装与卸载命令
bash
# 安装 APK(覆盖安装加 -r,允许降级加 -d)
adb install app.apk
adb install -r app.apk
adb install -r -d app.apk
# 多设备时指定设备
adb -s <设备序列号或 emulator-5554> install -r app.apk
# 卸载(按包名)
adb uninstall <包名>
adb uninstall -k <包名> # -k 保留数据与缓存,仅卸载应用
# 安装到指定用户(多用户设备)
adb install --user 0 app.apk
- 平板 :多用户时用
adb install --user 0 -r app.apk指定主户安装。车机 / 机器人 IoT :后装或升级常用adb install -r -d(覆盖且允许降级)。
1.4 文件拉取与推送
bash
# 从设备拉取文件/目录到电脑
adb pull /sdcard/DCIM/photo.jpg ./
adb pull /sdcard/Download/ ./local_folder/
# 从电脑推送到设备
adb push ./local_file.txt /sdcard/
adb push ./local_folder/ /sdcard/remote_folder/
# 多设备时指定设备
adb -s emulator-5554 pull /sdcard/xxx ./
常用路径示例:
-
应用私有目录(需 root 或 run-as):
/data/data/<包名>/。调试自己 的应用时可用run-as免 root 读私有文件:adb shell run-as <包名> cat /data/data/<包名>/files/xxx或adb shell run-as <包名> ls /data/data/<包名>/files。 -
外部存储:
/sdcard/或/storage/emulated/0/ -
下载目录:
/sdcard/Download/ -
车机 / 机器人:部分厂商定制路径不同(如应用数据在 /data/xxx);无屏设备可能无 DCIM,日志与配置文件路径以实际系统为准。
1.5 logcat 基础(进阶见第 9 节)
bash
# 实时看全部日志(Ctrl+C 停止)
adb logcat
# 按 tag 过滤(TAG 为进程里打的 tag)
adb logcat -s TAG
# 按优先级:V/D/I/W/E/F,只显示 W 及以上
adb logcat *:W
# 组合:只看某 tag 且 W 及以上
adb logcat -s TAG *:W
# 清空当前缓冲区再打
adb logcat -c && adb logcat
# 按 pid 过滤(先 adb shell ps 查 pid)
adb logcat --pid=12345
# 一次性抓取当前缓冲区后退出(不持续跟)
adb logcat -d > log.txt
- 车机 / 机器人 IoT :问题复现后常用
adb logcat -d -v threadtime > xxx.txt拉取归档;多台设备时用-s <IP>:5555分别抓取,避免混在一起。
1.6 清除应用数据与缓存
bash
# 清除应用数据(等同设置里「清除数据」)
adb shell pm clear <包名>
# 仅清除缓存(部分设备/版本支持)
adb shell pm clear --cache-only <包名>
- 平板 :多用户时可用
adb shell pm clear --user 0 <包名>(部分系统支持)。车机 :排查导航/媒体问题时常用pm clear <包名>后重试。
1.7 无线调试(配对 + connect)
Android 11+ 支持无线调试,无需 USB:
bash
# 手机:设置 → 开发者选项 → 无线调试 → 打开 → 使用配对码配对设备
# 电脑执行(将 <IP>:<配对端口> 和 <配对码> 换成手机显示)
adb pair <IP>:<配对端口>
# 按提示输入配对码
# 配对成功后,使用「使用配对码配对设备」下方显示的 IP:端口 连接
adb connect <IP>:<连接端口>
# 查看是否已通过无线连接
adb devices
# 断开无线
adb disconnect <IP>:<端口>
同一局域网内,手机 IP 可在设置 → WLAN → 当前网络详情中查看。
USB 连一次后切无线(Android 10 及以下常用) :手机 USB 连接电脑并授权后执行 adb tcpip 5555,拔掉 USB,手机与电脑同 WiFi 下执行 adb connect <手机IP>:5555 即可无线使用;重启手机后需重新 USB 连一次再执行 adb tcpip 5555。
1.8 多设备时指定设备(-s)
bash
# 所有命令都可在前加 -s <设备序列号> 指定设备
adb -s 1234567890 shell pm list packages
adb -s emulator-5554 install app.apk
adb -s 1234567890 logcat -s MyApp *:W
设备序列号由 adb devices 第一列得到。车机 / 平板 / 机器人 :无线连接时序列号多为 IP:5555(如 192.168.1.101:5555),脚本中可用 -s 192.168.1.101:5555 指定。
1.9 发版前 / 归档常用
bash
# 拉取设备上的 APK(先知道包名与路径,或从 /data/app 拉需 root)
adb pull /data/app/~~xxx/<包名>-xxx/base.apk ./release_xxx.apk
# 或使用 pm path 查路径后 pull(输出形如 package:/data/app/.../base.apk,pull 时需去掉 package: 前缀)
adb shell pm path <包名>
adb pull /data/app/~~xxx/<包名>-xxx/base.apk ./release_xxx.apk
# 若需从上一条输出自动取路径(Linux/macOS):adb pull $(adb shell pm path <包名> | sed 's/package://') ./
# 发版前抓一段日志归档
adb logcat -d -v threadtime > release_log_$(date +%Y%m%d_%H%M%S).txt
# 核对设备 API 与型号(发版/测试机核对)
adb shell getprop ro.build.version.sdk
adb shell getprop ro.product.model
- 车机 / 机器人:发版或 OTA 前后同样用上述命令拉 APK、抓 log、核对型号与 API,便于多机型兼容与问题对比。
2. 截图与录屏
2.1 截图(screencap)
bash
# 截图到设备本地
adb shell screencap /sdcard/screen.png
# 截图并直接拉回电脑(不落盘到设备)
adb exec-out screencap -p > screen.png
# 指定设备
adb -s emulator-5554 exec-out screencap -p > screen.png
# 设备上截图后拉取
adb shell screencap /sdcard/screen.png
adb pull /sdcard/screen.png ./
2.2 录屏(screenrecord)
bash
# 默认录屏(最长 3 分钟,Ctrl+C 提前结束)
adb shell screenrecord /sdcard/demo.mp4
# 指定时长(秒)、码率、分辨率
adb shell screenrecord --time-limit 30 --bit-rate 8000000 --size 1080x1920 /sdcard/demo.mp4
# 录完后拉回电脑
adb pull /sdcard/demo.mp4 ./
录屏默认保存到设备,需手动 adb pull 到电脑;screenrecord 不支持 exec-out 直接流式到电脑。
- 车机 / 平板 :大屏分辨率与手机不同,
screenrecord --size或截图后需按实际分辨率做适配参考。机器人 / 无屏 IoT :无显示时screencap/screenrecord可能不可用或需指定 display(如--display 0),以实际系统为准。
3. 包名、进程与权限
3.1 查包名与已安装应用
bash
# 列出所有已安装包名
adb shell pm list packages
# 只列第三方应用
adb shell pm list packages -3
# 按关键词过滤(如含 tencent)
adb shell pm list packages | grep tencent
# 查看某包安装路径
adb shell pm path <包名>
- 平板 :多用户时可先
adb shell am get-current-user再pm list packages --user 0等。车机 / 机器人 :pm list packages -3可区分预装与后装应用,便于排查预装覆盖或权限问题。
3.2 进程
bash
# 查看进程列表
adb shell ps
adb shell ps -A
# 按包名查 pid(需 grep)
adb shell ps -A | grep <包名>
# 或使用 pidof(部分系统)
adb shell pidof <包名>
3.3 权限与 dumpsys package
bash
# 查看某应用权限授予情况
adb shell dumpsys package <包名> | grep permission
# 授予运行时权限(Android 6+,如存储)
adb shell pm grant <包名> android.permission.READ_EXTERNAL_STORAGE
adb shell pm grant <包名> android.permission.WRITE_EXTERNAL_STORAGE
# 撤销权限
adb shell pm revoke <包名> android.permission.READ_EXTERNAL_STORAGE
# 重置某应用所有权限
adb shell pm reset-permissions <包名>
3.4 安装来源与权限列表
bash
# 查看安装来源(installer)
adb shell dumpsys package <包名> | grep installer
4. 系统信息与属性
4.1 getprop
bash
# 设备型号
adb shell getprop ro.product.model
# Android 版本与 SDK
adb shell getprop ro.build.version.release
adb shell getprop ro.build.version.sdk
# 序列号
adb shell getprop ro.serialno
# 列出所有属性(很多,可重定向)
adb shell getprop
4.2 settings(Global / Secure / System)
bash
# 读 Global 设置
adb shell settings get global <key>
# 写 Global 设置(需 root 或 adb shell 有权限)
adb shell settings put global <key> <value>
# 例如:查看 / 设置动画缩放
adb shell settings get global window_animation_scale
adb shell settings put global window_animation_scale 0.5
- 车机 / 机器人 :
getprop ro.product.model、ro.build.version.release等可区分厂商定制型号与版本。平板 :分辨率与 DPI 可用wm size、wm density(见文首平板小节)。
4.3 dumpsys 简要(battery、diskstats)
bash
# 电池状态
adb shell dumpsys battery
# 存储概况
adb shell dumpsys diskstats
更多 dumpsys 见第 10 节。
5. 应用生命周期
5.1 启动 Activity
bash
# 启动默认 Activity
adb shell am start -n <包名>/<Activity 全类名>
# 带 Intent extra
adb shell am start -n <包名>/.<MainActivity> --es key value
# 带 Intent action / category
adb shell am start -a android.intent.action.VIEW -d "https://example.com"
5.2 停止应用与发送 Broadcast
bash
# 强制停止应用
adb shell am force-stop <包名>
# 发送广播
adb shell am broadcast -a <action> -n <包名>/<Receiver>
- 车机 :启动 Launcher 或指定界面常用
am start -n <车机包名>/<主 Activity>;am force-stop可快速停掉卡住的应用。机器人:应用层启停与广播与手机一致。
5.3 清除数据与缓存
bash
adb shell pm clear <包名>
6. 自动化
6.1 input:点击、滑动、输入、按键
bash
# 点击坐标 (x, y)
adb shell input tap 500 1000
# 滑动:起点 (x1,y1) 终点 (x2,y2) 时长(ms)
adb shell input swipe 100 500 500 500 200
# 输入文本(空格用 %s,部分设备中文需 -e 编码)
adb shell input text "hello"
adb shell input text "hello%sworld"
# 按键(keyevent 码)
adb shell input keyevent KEYCODE_HOME
adb shell input keyevent KEYCODE_BACK
adb shell input keyevent KEYCODE_APP_SWITCH
adb shell input keyevent KEYCODE_ENTER
adb shell input keyevent 3 # 3=HOME, 4=BACK, 82=MENU
常用 keyevent 码:3 HOME,4 BACK,82 MENU,66 ENTER,67 DEL,61 TAB。完整码表见 Android KeyEvent。
- 车机 / 平板 :分辨率与手机不同,
input tap/swipe的坐标需按实际分辨率(可用wm size查看)。机器人 / 无屏 IoT :无触摸屏时input可能无效或不适用,自动化可依赖am start、am broadcast、厂商 API 等。
6.2 uiautomator 与界面层级
bash
# 导出当前界面层级到设备(便于自动化定位)
adb shell uiautomator dump /sdcard/window_dump.xml
adb pull /sdcard/window_dump.xml ./
6.3 测试场景:Monkey、批量测包、多机并行
bash
# Monkey 压力测试(事件数、包名、种子、忽略崩溃等)
adb shell monkey -p <包名> -v 1000
adb shell monkey -p <包名> -v --throttle 200 5000 -s 12345
# 测试前清数据再安装
adb shell pm clear <包名>
adb install -r test.apk
# 多设备并行执行同一命令(示例:各设备都安装同一 APK)
for dev in $(adb devices | grep -w device | awk '{print $1}'); do
adb -s "$dev" install -r app.apk
done
- 车机 / 平板 / 机器人 IoT :多台设备时
$dev常为IP:5555(如192.168.1.101:5555),可先把设备 IP 列表写成变量再循环,便于批量升级与拉日志。
6.4 CI 中 adb 用法要点
- 无头环境 :CI 上通常无真机,多用模拟器;先
emulator -list-avds,再emulator -avd <名> -no-window &启动,adb wait-for-device等待就绪后再执行 install / test。车机 / 机器人 IoT :CI 若连实体设备,多为网络连接(adb connect <IP>:5555),需保证设备与 Runner 同网段或通过跳板机可达。 - 安装测包 :
adb install -r test.apk;多设备用-s或循环。 - 执行 instrumented test :
adb shell am instrument -w -e class <类名> <包名>/androidx.test.runner.AndroidJUnitRunner,或使用 GradleconnectedAndroidTest时底层也是 adb。 - 拉取报告/日志 :
adb pull /sdcard/...或adb logcat -d > log.txt,在 CI 脚本里拉取到工作目录再归档。 - 超时与重试 :安装或 shell 命令加超时(如
timeout 120 adb install -r app.apk);设备未就绪时重试adb wait-for-device或adb shell getprop sys.boot_completed直到为 1。 - 常见失败 :device offline → 重连或重启 adb;more than one device → 用
-s;unauthorized → 重新授权或检查 RSA key。
7. 组合命令打包与一键运行
7.1 咋打包:步骤概述
- Shell(.sh) :新建文本,写入
#!/bin/bash和若干行adb ...,保存为xxx.sh;chmod +x xxx.sh后执行./xxx.sh。 - Windows 批处理(.bat) :新建文本,写入
@echo off和若干行adb ...,保存为xxx.bat,双击或在 CMD 中xxx.bat运行。 - alias / 函数 :在
~/.bashrc或~/.zshrc里写alias adb-log='adb logcat -s MyTag *:W',或function adbpull(){ adb pull "$1" ./; },保存后source或新开终端即生效。
脚本建议放在固定目录(如 ~/bin 或项目 scripts/),命名见名知意(如 adb-pull-log.sh、adb-screenshot.bat)。多设备时在脚本内用 adb -s "$DEVICE",DEVICE 可由环境变量或参数传入。车机 / 平板 / 机器人 :设备列表常为 IP 列表(如 192.168.1.101:5555),可写成 DEVS="ip1:5555 ip2:5555" 再循环执行。
7.2 示例一:一键清 logcat 并拉日志到电脑
保存为 adb-log-save.sh(macOS/Linux),在脚本所在目录执行 chmod +x adb-log-save.sh,运行 ./adb-log-save.sh。
bash
#!/bin/bash
set -e
adb logcat -c
echo "复现问题后按 Enter 停止抓日志..."
read
adb logcat -d -v threadtime > "./log_$(date +%Y%m%d_%H%M%S).txt"
echo "已保存到当前目录 log_*.txt"
7.3 示例二:一键截图并拉回电脑
保存为 adb-screenshot.sh,chmod +x adb-screenshot.sh 后执行。
bash
#!/bin/bash
set -e
OUT="./screen_$(date +%Y%m%d_%H%M%S).png"
adb exec-out screencap -p > "$OUT"
echo "已保存到 $OUT"
Windows 可建 adb-screenshot.bat,双击运行(注意 %time% 在小时为个位数时前有空格,文件名可能含空格;若需严格无空格可用 PowerShell 或 WSL):
batch
@echo off
set OUT=screen_%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2%.png
set OUT=%OUT: =0%
adb exec-out screencap -p > %OUT%
echo 已保存到 %OUT%
pause
7.4 示例三:多设备选择后执行命令
保存为 adb-select.sh,执行后选设备号,再执行 adb -s <选中的设备> shell pm list packages -3。需 Bash 4+ (macOS 默认 bash 为 3.x,可用 bash adb-select.sh 或安装 bash 5+)。
bash
#!/bin/bash
mapfile -t devs < <(adb devices | grep -w device | awk '{print $1}')
echo "选择设备:"
for i in "${!devs[@]}"; do echo " $i: ${devs[$i]}"; done
read -r idx
DEVICE="${devs[$idx]}"
adb -s "$DEVICE" shell pm list packages -3
若需兼容旧 Bash(如 macOS 默认),可用:devs=($(adb devices | grep -w device | awk '{print $1}')),再 for i in "${!devs[@]}"; do ...; done。
7.5 示例四:批量安装当前目录 APK
保存为 adb-install-all.sh,在放有多个 apk 的目录执行。
bash
#!/bin/bash
for f in *.apk; do
[ -f "$f" ] && adb install -r "$f" && echo "installed $f"
done
8. 端口转发与代理
8.1 forward 与 reverse
bash
# 将电脑某端口转发到设备某端口(电脑上访问 localhost:电脑端口 即转发到设备该端口,用于访问设备上监听该端口的服务)
adb forward tcp:电脑端口 tcp:设备端口
adb forward tcp:8080 tcp:80
# 反向:设备访问电脑端口(如电脑跑调试服务,设备连 localhost:设备端口 即连到电脑)
adb reverse tcp:设备端口 tcp:电脑端口
adb reverse tcp:8080 tcp:8080
# 列出当前所有端口转发
adb forward --list
# 删除某条转发
adb forward --remove tcp:8080
adb forward --remove-all
8.2 抓包与本地服务调试
- 抓包 :电脑运行 Charles/Fiddler,设置代理端口(如 8888);设备连同一 WiFi,代理填电脑 IP:8888;或
adb reverse tcp:8888 tcp:8888后设备代理填127.0.0.1:8888,流量经电脑。 - 本地服务 :电脑跑后端服务在 3000 端口,
adb reverse tcp:3000 tcp:3000,应用里请求http://127.0.0.1:3000即访问电脑。 - 车机 / 机器人 :调试本机跑在电脑上的服务(如 Mock API、后端)时,常用
adb reverse让设备访问电脑端口,无需改设备代理或网络配置。
8.3 与 IDE 调试配合
- reverse :Android Studio 调试时,若应用要访问本机 PC 服务,用
adb reverse把设备端口映射到电脑端口即可。 - jdwp :调试 Java 进程时,可用
adb forward tcp:8700 jdwp:<pid>将 jdwp 转发到电脑,再用 IDE 连接 localhost:8700(通常 IDE 已自动处理)。 - 常用:
adb shell am set-debug-app -w <包名>设置调试应用;断点调试时 IDE 会自动处理 forward。
9. logcat 进阶
(基础用法见第 1.5 节。)
9.1 按 tag、pid、级别过滤
bash
adb logcat -s MyTag *:W
adb logcat --pid=12345
adb logcat -s MyTag --pid=12345 *:E
9.2 多 buffer(main、system、crash)
bash
adb logcat -b main -b system -b crash
adb logcat -b all
9.3 清空、一次性抓取、保存、按时间
bash
adb logcat -c && adb logcat -v threadtime > log.txt
adb logcat -d -v threadtime > log.txt
adb logcat -t 500 # 只打最近 500 行
adb logcat -T "01-01 12:00:00.000" # 从指定时间开始(格式 MMM-DD HH:MM:SS.mmm)
10. dumpsys 常用
10.1 常用命令
bash
# 电池
adb shell dumpsys battery
# 内存与进程(meminfo)
adb shell dumpsys meminfo
adb shell dumpsys meminfo <包名>
# 当前前台 Activity / 栈
adb shell dumpsys activity activities | grep -E "mResumed|mFocusedApp"
# 包信息(含权限)
adb shell dumpsys package <包名>
# CPU 信息(简要)
adb shell dumpsys cpuinfo
10.2 常用字段说明
- 排查卡顿 :结合
meminfo、cpuinfo和 logcat;查当前界面用dumpsys activity activities。 - dumpsys battery 常用字段:
status(2=充电中、3=放电)、level(电量 0--100)、temperature(温度,需除以 10 为摄氏度)。
11. 排障与 FAQ
11.1 设备不显示(adb devices 为空或 unauthorized)
- USB:换线/换口、确认「文件传输」或 MTP 模式;安装/更新设备厂商 USB 驱动(Windows)。
- 开发者选项 :开启「USB 调试」;若为 unauthorized,设备上会弹授权框,点「允许」;可勾选「仅充电时允许 USB 调试」减少重复弹窗。
- 重启 adb :
adb kill-server→adb start-server→ 再插线,设备重新弹授权。
11.2 多设备 / 模拟器冲突
- 所有命令加
-s <序列号>指定设备;adb devices查看序列号。 - 模拟器多开时用
emulator-5554、emulator-5556等区分。 - 车机 / 平板 / 机器人 :无线连接时序列号为
IP:5555;若adb devices不显示,检查设备与电脑是否同网段、设备是否已开「网络 ADB」、防火墙是否放行 5555,车机还需确认是否进入工程模式。
11.3 典型报错
- device offline :重插线或
adb kill-server再adb start-server;或重启设备。 - more than one device/emulator :必须加
-s <设备>。 - unauthorized :设备上点「允许」;若仍不行,删除电脑上的
~/.android/adbkey(及 adbkey.pub),重插后重新授权。
11.4 RSA 授权与 revoke
- 首次连接会生成
~/.android/adbkey,设备点「允许」后建立信任。 - 换电脑或重装系统后需重新授权;设备端可「撤销 USB 调试授权」后重连再点允许。
11.5 FAQ 速答
| 问题 | 命令/做法 |
|---|---|
| 如何查当前前台包名/Activity? | `adb shell dumpsys activity activities |
| 如何批量装 APK? | 见第 7.5 节脚本;或 for f in *.apk; do adb install -r "$f"; done |
| 如何只清应用缓存? | adb shell pm clear --cache-only <包名>(部分系统支持) |
| 如何给应用授权存储权限? | adb shell pm grant <包名> android.permission.READ_EXTERNAL_STORAGE(及 WRITE 等) |
| 多用户设备如何指定用户? | 安装时 adb install --user 0 app.apk;查当前用户 adb shell am get-current-user |
| adb backup 还能用吗? | 官方已废弃(Android 9+ 对非 root 限制多),建议用 pull 或第三方备份工具 |
12. 速查表
| 分类 | 命令 | 说明 |
|---|---|---|
| 连接 | adb devices |
列出设备 |
| 连接 | adb kill-server / adb start-server |
重启 adb 服务 |
| 连接 | adb connect <IP>:<端口> |
无线连接(需先配对) |
| 应用 | adb install -r app.apk |
安装(覆盖) |
| 应用 | adb uninstall <包名> |
卸载 |
| 应用 | adb shell pm clear <包名> |
清除数据 |
| 应用 | adb shell pm list packages -3 |
列第三方包 |
| 应用 | adb shell am start -n <包名>/<Activity> |
启动 Activity |
| 应用 | adb shell am force-stop <包名> |
强制停止 |
| 文件 | adb pull <设备路径> <本地路径> |
拉取 |
| 文件 | adb push <本地路径> <设备路径> |
推送 |
| 日志 | adb logcat |
实时日志 |
| 日志 | adb logcat -s TAG *:W |
按 tag 与级别 |
| 日志 | adb logcat -d > log.txt |
一次性抓取到文件 |
| 输入 | adb shell input tap x y |
点击 |
| 输入 | adb shell input swipe x1 y1 x2 y2 时长 |
滑动 |
| 输入 | adb shell input text "xxx" |
输入文本 |
| 输入 | adb shell input keyevent KEYCODE_HOME |
按键 |
| 截图 | adb exec-out screencap -p > out.png |
截图到电脑 |
| 录屏 | adb shell screenrecord /sdcard/demo.mp4 |
录屏(后 pull) |
| 权限 | adb shell pm grant <包名> <权限名> |
授予权限 |
| 系统 | adb shell getprop ro.build.version.sdk |
API level |
| 多设备 | adb -s <设备> <子命令> |
指定设备 |
(更多细节见对应章节。)
延伸与相关
- scrcpy:开源投屏+键鼠控制,底层依赖 adb,常与本文命令配合使用(安装 APK、拉日志后再用 scrcpy 操作界面)。
- logcat 输出格式 :
-v brief/time/threadtime/long,日常排查多用-v threadtime(带时间、pid、tid)。 - 官方文档 :Android 调试桥 (adb)、Platform-Tools 发行说明。
手册内命令在 Android 常见版本与 adb 当前稳定版下可用;若遇差异以官方文档与当前环境为准。