ADB 安卓实战手册

本文是一份可直接复制命令使用 的 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 devicesinstalllogcatpull/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 5555adb 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 (推荐):含 adbfastboot 等,与 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 rootadb 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(或带签名的变体名)
  • 推荐命令 :覆盖安装(保留数据)用 -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/xxxadb 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

  • 车机 / 平板 / 机器人 IoT :这些设备常用无线 连接(车机/机器人连热点或与电脑同网),连接方式与 IP 查看见文首 车机平板、[机器人 IoT](#机器人 IoT) 小节。

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-userpm 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.modelro.build.version.release 等可区分厂商定制型号与版本。平板 :分辨率与 DPI 可用 wm sizewm 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 startam 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 testadb shell am instrument -w -e class <类名> <包名>/androidx.test.runner.AndroidJUnitRunner,或使用 Gradle connectedAndroidTest 时底层也是 adb。
  • 拉取报告/日志adb pull /sdcard/...adb logcat -d > log.txt,在 CI 脚本里拉取到工作目录再归档。
  • 超时与重试 :安装或 shell 命令加超时(如 timeout 120 adb install -r app.apk);设备未就绪时重试 adb wait-for-deviceadb 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.shchmod +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.shadb-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.shchmod +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 常用字段说明

  • 排查卡顿 :结合 meminfocpuinfo 和 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 调试」减少重复弹窗。
  • 重启 adbadb kill-serveradb start-server → 再插线,设备重新弹授权。

11.2 多设备 / 模拟器冲突

  • 所有命令加 -s <序列号> 指定设备;adb devices 查看序列号。
  • 模拟器多开时用 emulator-5554emulator-5556 等区分。
  • 车机 / 平板 / 机器人 :无线连接时序列号为 IP:5555;若 adb devices 不显示,检查设备与电脑是否同网段、设备是否已开「网络 ADB」、防火墙是否放行 5555,车机还需确认是否进入工程模式。

11.3 典型报错

  • device offline :重插线或 adb kill-serveradb 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 当前稳定版下可用;若遇差异以官方文档与当前环境为准。

相关推荐
summerkissyou198712 小时前
Android Handler:机制、原理与示例
android
哈哈浩丶12 小时前
安卓系统全流程启动
android·linux·驱动开发
summerkissyou198714 小时前
Android-Audio-MediaPlayer-播放-流程
android·audio
mjhcsp14 小时前
C++ 后缀平衡树解析
android·java·c++
没有bug.的程序员15 小时前
Gradle 构建优化深度探秘:从 Java 核心到底层 Android 物理性能压榨实战指南
android·java·开发语言·分布式·缓存·gradle
lljss202021 小时前
MediaPad 10 Link S10-201wa(安卓4.1.2) 安装vlc
android
黄昏晓x21 小时前
C++----异常
android·java·c++
aningxiaoxixi1 天前
Android Audio 广播之 ACTION_AUDIO_BECOMING_NOISY
android·java·python
Chengbei111 天前
内网渗透过程中搜寻指定文件内容Everything小工具
android·安全·网络安全·系统安全·密码学·网络攻击模型·安全架构