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 当前稳定版下可用;若遇差异以官方文档与当前环境为准。

相关推荐
菜鸟国国16 小时前
一步到位学 Compose + Paging3:从 0 到 1 实现分页加载(超详细新手教程)
android
TO_ZRG16 小时前
Android Service基础
android
ECT-OS-JiuHuaShan17 小时前
功夫不负匠心人,渡劫代谢舞沧桑
android·开发语言·人工智能·算法·机器学习·kotlin·拓扑学
ZC跨境爬虫19 小时前
移动端爬虫工具Fiddler完整配置流程:PC+安卓模拟器全覆盖,零基础一次配置成功
android·前端·爬虫·测试工具·fiddler
巴德鸟19 小时前
DaVinci 常用技巧 关键帧 自动字幕 追踪 音频 冻结帧 快捷键 多轨道字幕 扩充边缘
android·编辑器·音视频·视频·davinci·davin
学习使我健康20 小时前
Android 广播介绍详情
android·开发语言·kotlin
dalancon20 小时前
AudioTrack Start 执行流程分析
android
众少成多积小致巨21 小时前
Android 初始化语言入门
android·linux·c++
Carson带你学Android21 小时前
谁才是地表最强 Android Agent 大模型?Google官方测评来了!
android·openai
followYouself21 小时前
ASM开源库实现函数耗时插桩
android·asm·asm插桩·字节码插桩