Android ADB 命令教程与速查
ADB(Android Debug Bridge) 是 Android 开发与测试中最常用的命令行工具链,用于连接真机/模拟器、安装应用、执行设备端 Shell、抓取日志与做简单 UI 注入等。本文按功能模块 整理常用子命令、典型参数与注意点,并附场景速查 ;文中配有 Mermaid 示意图 、对照表 与少量 ASCII 示意 ,便于建立整体心智模型。子命令会随 Android 版本 与 厂商 ROM 增减或行为变化,以官方文档与实机为准。
目录
- [ADB 是什么与基本环境](#ADB 是什么与基本环境)
- [ADB 组件架构(示意图)](#ADB 组件架构(示意图))
- 多设备与命令写法速查
- 一、设备与连接
- 无线调试两条常见路径(示意)
- [二、应用安装与管理(
pm/am)](#二、应用安装与管理(pm / am)) - [Shell cmd 与 pm am 对照(提要)](#Shell cmd 与 pm am 对照(提要))
- 三、文件传输与设备端文件操作
- [四、Shell 与系统信息](#四、Shell 与系统信息)
- 五、日志与排障
- [JDWP 与 Java 进程调试(提要)](#JDWP 与 Java 进程调试(提要))
- 六、屏幕、输入与媒体采集
- [Monkey 稳定性压测(提要)](#Monkey 稳定性压测(提要))
- 七、网络:端口转发
- 八、权限与系统设置(提要)
- 九、其他与版本差异
- 十、Fastboot(独立工具,提要)
- 十一、最值得掌握的命令清单
- 附录:场景与命令总表
- 延伸阅读
- 免责声明
ADB 是什么与基本环境
| 概念 | 说明 |
|---|---|
| adb | PC 侧客户端,与 adb server 、设备上的 adbd 通信。 |
| adb shell | 在设备上执行命令(或进入交互 shell)。 |
| 多设备 | 多台连接时用 -s <serial> 指定序列号。 |
使用前请开启设备的 开发者选项 → USB 调试 (或 无线调试 ),adb devices 中状态应为 device;unauthorized 需在手机上点允许。
bash
adb devices
adb devices -l
adb kill-server
adb start-server
ADB 组件架构(示意图)
一条命令从键盘到设备的大致路径如下(逻辑示意,实现细节以平台工具为准):
Android 设备
开发机
USB / 网络 TCP
adb 客户端
adb server(本机后台)
adbd(设备守护进程)
shell / pm / am / ...
text
你输入: adb shell pm path com.foo
│
▼
┌────────────────┐ USB / TCP ┌──────────────┐
│ adb 客户端 │ ──────────────────► │ adbd │
│ + adb server │ │ + shell 子进程 │
└────────────────┘ └──────────────┘
多设备与命令写法速查
多台设备同时在线时,必须 用 -s 指定序列号,否则默认选中「列表中的第一台」,易误操作。
| 写法 | 示例 |
|---|---|
| 指定单台执行 | adb -s R58M90ABCDE install app.apk |
| 指定单台进 shell | adb -s emulator-5554 shell |
| 查看序列号 | adb devices -l 第一列即为 serial |
无线调试连接成功后,列表里会出现形如 192.168.1.10:5555 的序列号,用法与 USB 相同 ,仍用 -s 区分。
一、设备与连接
| 命令 | 说明 |
|---|---|
adb get-state |
输出 device / offline / bootloader 等。 |
adb get-serialno |
当前默认设备的序列号。 |
adb connect <host>:<port> |
网络连接(需设备侧已开 TCP 调试或无线调试)。 |
adb disconnect [<host>:<port>] |
断开网络连接。 |
adb usb |
从网络模式切回 USB(视环境支持)。 |
adb reboot |
正常重启。 |
adb reboot bootloader / recovery / fastboot |
进入对应模式(因机型而异)。 |
adb root / adb unroot |
以 root 重启 adbd(多数零售机不可用,模拟器/工程机常见)。 |
设备列表状态与常见处理
adb devices 状态 |
含义(简要) | 常见处理 |
|---|---|---|
device |
已授权且就绪 | 正常使用;多机时加 -s。 |
unauthorized |
本机指纹未获手机信任 | 手机上点「允许 USB 调试」;换线/换口;执行 adb kill-server 后重插。 |
offline |
连接异常或未就绪 | 重插 USB、换线、关闭再开 USB 调试;检查驱动(Windows)。 |
no permissions |
Linux 上 udev 规则缺失 | 配置 udev 规则或使用有权限用户;官方文档有范例。 |
| 无列表 / 空 | 未识别 | 换数据线(数据线而非仅充电线)、换端口、换「文件传输」模式。 |
无线调试(提要) :Android 11+ 多在「开发者选项 → 无线调试」内配对 并得到 IP 与端口;旧流程 adb tcpip 5555 + adb connect 在部分机型仍可用,以当前系统菜单为准。
无线调试两条常见路径(示意)
下面两条路径二选一即可;同一台机不要混用未搞清的端口(配对端口与调试端口常不同)。
路径 A:USB 已连上 → 切 TCP → 拔掉线再 connect(经典 tcpip)
USB 已连接且 adb 正常
adb tcpip 5555
adbd 监听 5555
获知手机局域网 IP
设置或 ip addr
adb connect IP:5555
bash
adb tcpip 5555
# 在手机「关于手机 / WLAN」或开发者选项里查看 IP,或用 adb shell 查网卡(因 ROM 而异)
adb connect 192.168.1.10:5555
adb devices
# 需要切回 USB 时(视环境支持):
adb usb
路径 B:Android 11+「无线调试」------先配对再连接
手机:无线调试
配对码 + 配对端口
PC:adb pair IP:配对端口
手机显示调试端口
PC:adb connect IP:调试端口
bash
# 配对端口、调试端口、配对码以手机界面为准,下行为示意:
adb pair 192.168.1.10:37789
adb connect 192.168.1.10:5555
| 注意点 | 说明 |
|---|---|
| 防火墙 / 隔离 Wi‑Fi | 部分公司网禁止设备互访,会导致 connect 超时。 |
| 多设备 | connect 成功后列表里会出现 IP:端口 形式的 serial,后续命令仍可用 -s。 |
| 安全 | 无线调试等价于在网络上暴露调试通道,仅在可信网络使用。 |
二、应用安装与管理(pm / am)
安装与卸载
bash
adb install path/to/app.apk
adb install -r path/to/app.apk # 覆盖安装
adb install -t path/to/app.apk # 允许 testOnly 等(按提示使用)
adb install -d path/to/app.apk # 允许降级(版本号更低)
adb install -g path/to/app.apk # 安装时授予运行时权限(行为随版本变化)
# 分包 APK(base + split)同次安装(路径与选项以 adb 帮助为准)
adb install-multiple base.apk split_config.xxhdpi.apk
adb uninstall com.example.app
adb uninstall -k com.example.app # 卸载但保留数据/缓存(参数含义以 pm 为准)
包名与路径
bash
adb shell pm list packages
adb shell pm list packages -3 # 第三方应用
adb shell pm list packages -s # 系统应用
adb shell pm list packages -f # 带 APK 路径
adb shell pm path com.example.app
adb shell pm dump com.example.app # 详细信息,输出量大
adb shell pm clear com.example.app # 清除应用数据
启动、停止与广播
bash
adb shell am start -n com.example.app/.MainActivity
adb shell am start -a android.intent.action.VIEW -d "https://example.com"
adb shell am force-stop com.example.app
adb shell am broadcast -a <ACTION> [--es key value ...]
安装与拉起应用(流程示意)
设备
开发机
adb install
adb shell am start -n ...
APK / AAB 已构建产物
PackageManager 安装
ActivityManager 启动界面
| 场景 | 常用命令 |
|---|---|
| 刚装好要启动主界面 | adb shell monkey -p com.example.app -c android.intent.category.LAUNCHER 1 或已知 Activity 时用 am start -n |
| 查看当前前台 Activity(调试用) | `adb shell dumpsys activity activities |
Shell cmd 与 pm am 对照(提要)
较新 Android 上,pm、am 多为 Shell 封装 ;底层常由 cmd 统一调度到系统服务(具体实现随版本演进)。日常仍可直接用 pm / am;遇到脚本兼容或排查时,可对照 cmd 形式。
| 常见意图 | 经典写法(仍推荐) | cmd 等价示意 |
|---|---|---|
| 列包名 | adb shell pm list packages |
adb shell cmd package list packages |
| 查 APK 路径 | adb shell pm path com.foo |
adb shell cmd package path com.foo |
| 清数据 | adb shell pm clear com.foo |
adb shell cmd package clear com.foo |
| 强制停 | adb shell am force-stop com.foo |
adb shell cmd activity force-stop com.foo |
bash
# 查看 cmd 子命令帮助(输出较长)
adb shell cmd package help
adb shell cmd activity help
三、文件传输与设备端文件操作
bash
adb push <本地路径> <设备路径>
adb pull <设备路径> <本地路径>
进入设备 shell 后,常用与 Linux 类似:ls、cd、pwd、cat、rm、cp、mv、chmod 等。
写入 /data/ 等受保护分区通常需要 root 或 调试版 镜像,勿在不了解后果的生产设备上操作。
| 场景 | 命令示例 |
|---|---|
| 推配置文件到 Download | adb push local.json /sdcard/Download/ |
| 取 ANR traces | adb pull /data/anr/traces.txt .(路径/权限因版本而异,失败时试 bugreport) |
四、Shell 与系统信息
bash
adb shell
adb shell getprop ro.build.version.release # 示例:读系统属性
adb shell getprop | grep product # 过滤查看
adb shell dumpsys activity # Activity 栈、窗口等,输出量很大
adb shell dumpsys window
adb shell dumpsys battery
adb shell dumpsys package com.example.app
dumpsys 子系统众多,建议配合 grep 或重定向到文件再分析。
常用 dumpsys 子命令 |
典型用途 |
|---|---|
activity |
栈顶 Activity、任务栈、生命周期相关排查 |
window |
窗口层级、焦点、分辨率相关 |
meminfo <包名> |
某应用内存占用概览 |
battery |
耗电与唤醒锁粗查 |
五、日志与排障
bash
adb logcat
adb logcat -c # 清空
adb logcat -v time # 带时间戳
adb logcat *:E # 仅 Error 及以上(级别可调整)
adb logcat -s TAG1 TAG2 # 按 Tag 过滤
adb bugreport # 生成综合报告(体积大,用于深度排障)
logcat 优先级与输出格式
| 优先级字母 | 含义 |
|---|---|
V |
Verbose(最细) |
D |
Debug |
I |
Info |
W |
Warn |
E |
Error |
F |
Fatal |
S |
Silent(几乎不输出) |
常用过滤:adb logcat *:W 表示全局 只显示 Warn 及以上;adb logcat -s MyTag 表示只显示指定 Tag。
-v 格式 |
说明 |
|---|---|
brief |
默认风格,较省行宽 |
time |
带时间戳,日常最常用之一 |
threadtime |
带时间与线程 id,便于并发问题 |
应用 / 系统服务打印 log
logd 环形缓冲
adb logcat 终端 / 文件
JDWP 与 Java 进程调试(提要)
JDWP(Java Debug Wire Protocol) 用于调试设备上 Dalvik/ART 中的 Java/Kotlin 代码。日常开发中 Android Studio「Debug」 已封装大部分步骤;命令行侧只需建立心智模型:列出可调试进程 → 转发 JDWP 端口 → 调试器 attach。
adb jdwp
列出可附加进程
adb forward tcp:本地端口 jdwp:进程PID
IDE / jdb
attach localhost:本地端口
bash
# 列出当前暴露 JDWP 的进程(输出为 PID 列表,形态因版本而异)
adb jdwp
# 将本机 8700 转发到指定 PID 的 JDWP(示例 PID 需替换为真实值)
adb forward tcp:8700 jdwp:922
# 传统命令行调试器(现代开发较少手敲,仅供理解链路)
# jdb -attach localhost:8700
| 提示 | 说明 |
|---|---|
与 adb reverse 区别 |
JDWP 常用 adb forward:由 PC 侧调试器连入设备进程。 |
| 进程要选对 | 应 attach 到目标应用进程对应 PID;列表为空时多为进程不可调试或未开启调试选项。 |
| 优先用 IDE | 手动 jdb 易踩 classpath / 断点源不一致问题,排障仍以 Studio 为准。 |
六、屏幕、输入与媒体采集
6.1 文本:input text
bash
adb shell input text HelloWorld
- 空格 :常见写法用
%s代替空格,例如:Hello%sWorld。 @.:等符号 :常需 URL 编码 形式,例如test@gmail.com→test%40gmail%2Ecom。- 中文 / 广义 Unicode :
input text往往不可靠;可用 剪贴板 + 粘贴 、UI 自动化(如 uiautomator2 / Appium) 或应用内调试入口。 - 外层 Shell(PowerShell / cmd / bash)对引号与
%的解析不同;复杂字符串可先adb shell再执行input text ...。 - 焦点需在可编辑控件内,否则可能「命令成功但界面无变化」。
剪贴板变通(注意非系统标准) :网络上常见 am broadcast -a clipper.set -e text "..." 依赖设备上安装了实现该 Action 的第三方剪贴板应用 ;粘贴可尝试 adb shell input keyevent 285(KEYCODE_PASTE,以 ROM 与焦点为准)。
表单类自动化时,常见顺序可以概括为:
input tap 点中编辑框
input text 或剪贴板+粘贴
keyevent 回车或下一项
6.2 按键、点击、滑动
bash
adb shell input keyevent 66 # 常为回车(KeyCode 以官方文档为准)
adb shell input keyevent 4 # 常为返回
adb shell input tap 500 800
adb shell input swipe x1 y1 x2 y2 [duration_ms]
常用 KeyCode 简表 (完整常量表见 KeyEvent 官方文档):
| KeyCode(数字) | 常量名(常见) |
|---|---|
3 |
KEYCODE_HOME |
4 |
KEYCODE_BACK |
66 |
KEYCODE_ENTER |
67 |
KEYCODE_DEL |
112 |
KEYCODE_FORWARD_DEL |
285 |
KEYCODE_PASTE |
不同 ROM 对「长按菜单、最近任务、助手键」等可能占用额外键值,不要死记未经验证的数字,以文档 + 实机为准。
6.3 截图与录屏
bash
adb shell screencap -p /sdcard/screen.png
adb pull /sdcard/screen.png .
adb shell screenrecord /sdcard/demo.mp4 # Ctrl+C 停止;时长与分辨率受系统限制
| 能力 | 典型用途 |
|---|---|
screencap |
UI 自动化前后截图对比、缺陷附件 |
screenrecord |
短复现录像(注意文件体积与时长限制) |
Monkey 稳定性压测(提要)
monkey 是系统自带的 伪随机 UI 事件 压测工具,用于粗粒度稳定性摸底(崩溃、ANR、资源泄漏线索)。仅建议在测试机 / 可恢复环境使用,不要在存有重要数据的生产机上长时间乱点。
bash
# 仅向指定包发送事件,节流 300ms,详细输出 5000 步(示意)
adb shell monkey -p com.example.app --throttle 300 -v 5000
| 常用参数(节选) | 作用 |
|---|---|
-p <包名> |
限制事件发往该包(可重复 -p 多个包) |
--throttle <ms> |
事件间隔,降低负载与误触系统设置的概率 |
-v |
日志详细程度(可叠多个 -v) |
--ignore-crashes |
崩溃后继续跑(用于长稳) |
--ignore-timeouts |
忽略 ANR 超时(长稳慎用,易掩盖问题) |
--ignore-security-exceptions |
忽略部分安全异常(慎用) |
未加 -p 或范围过大
monkey 伪随机事件流
目标 App UI
系统弹窗 / 设置 / 其他 App
实践建议 :尽量 -p 限定包名 + 合理 --throttle;与 logcat 同开窗口 便于归因;长稳任务配合 CI 与 离线 bugreport 归档。
七、网络:端口转发
bash
adb forward tcp:8080 tcp:8080 # 本机端口 → 设备端口
adb reverse tcp:8080 tcp:8080 # 设备访问本机服务(常用于 Web 调试)
forward 与 reverse 对照(图 + 表)
adb forward tcp:L1 tcp:L2
流量转发
PC 监听 L1
设备上某进程监听 L2
adb reverse tcp:R1 tcp:R2
流量转发
设备内访问 127.0.0.1:R1
PC 上本地服务监听 R2
| 命令 | 谁发起连接 | 典型场景 |
|---|---|---|
adb forward |
PC 侧连到设备上端口 | PC 上工具访问手机里跑的 HTTP/gRPC 调试服务 |
adb reverse |
设备侧 访问 localhost |
手机浏览器访问本机 webpack dev server(Web 联调极常用) |
八、权限与系统设置(提要)
bash
adb shell pm grant com.example.app android.permission.CAMERA
adb shell pm revoke com.example.app android.permission.CAMERA
adb shell settings get system screen_brightness
adb shell settings put system screen_brightness 128
appops、settings 行为与可用项因版本差异大,修改前建议确认含义与风险。
九、其他与版本差异
| 命令 / 话题 | 说明 |
|---|---|
adb backup / adb restore |
旧式备份能力在较新系统上多已废弃或受限,勿依赖为唯一备份手段。 |
adb remount / adb disable-verity |
涉及系统分区与校验,仅限明确知情的开发/调试镜像,误用可致设备无法启动。 |
adb emu |
多与模拟器配套。 |
| 无线调试 | Android 11+ 常见「无线调试」配对流程与旧版 tcpip 5555 方式并存,以当前系统界面为准。 |
十、Fastboot(独立工具,提要)
Fastboot 与 adb 常一起出现在平台工具包中,但协议与用途不同:多用于 Bootloader 下刷写分区、解锁等。示例(高风险,需官方镜像与教程):
bash
fastboot devices
fastboot flash boot boot.img
fastboot reboot
十一、最值得掌握的命令清单
下列为日常开发/测试中出现频率最高的命令,建议优先练熟:
| 序号 | 命令 | 典型用途(一句话) |
|---|---|---|
| 1 | adb devices |
确认连接、拿 serial、看 unauthorized |
| 2 | adb install / adb uninstall |
装包、卸包、迭代调试 |
| 3 | adb shell |
在设备上跑 pm/am/cmd/脚本、排查环境 |
| 4 | adb logcat |
崩溃、ANR、系统与服务日志 |
| 5 | adb push / adb pull |
配置文件、抓 trace、取截图文件 |
| 6 | adb shell input(text / tap / keyevent) |
轻量 UI 自动化、复现路径 |
| 7 | adb shell am start / am force-stop |
拉起页面、杀进程清状态 |
| 8 | adb shell pm list packages / pm path |
查包名、定位 APK 路径 |
| 9 | adb shell dumpsys(按需子系统) |
栈、窗口、内存、电量等深度状态 |
| 10 | adb reboot / adb connect |
网络调试、恢复异常 adbd |
| 11 | adb forward / adb reverse |
联调端口:PC↔设备双向穿透 |
| 12 | adb shell screencap / screenrecord |
留证、UI 对比、短录像复现 |
| 13 | adb shell getprop |
版本、指纹、厂商属性快速确认 |
| 14 | adb bugreport |
一次性打包现场,给测试/厂商 |
| 15 | fastboot devices(刷机场景) |
Bootloader 下刷写分区(高风险) |
| 16 | adb tcpip / adb pair / adb connect |
无线调试切换与连接 |
| 17 | adb jdwp + adb forward ... jdwp:... |
Java/Kotlin 调试端口转发 |
| 18 | adb shell monkey |
随机压测、长稳冒烟(测试机) |
投屏与控制类工具(如 scrcpy )不属于 ADB 内置子命令,但与 ADB 配合极常见,可按需单独学习。
附录:场景与命令总表
| 你想做的事 | 首选命令 / 组合 |
|---|---|
| 确认设备连上 | adb devices / adb devices -l |
| 装包 | adb install -r xxx.apk |
| 查包名 | `adb shell pm list packages |
| 清数据重装测首启 | adb shell pm clear com.foo 后再装/启 |
| 看崩溃栈 | adb logcat -v time *:E 或按包名/Tag 过滤 |
| 深度打包现场 | adb bugreport |
| 拉文件 | adb pull |
| 点 UI / 输英文 | input tap + input text |
| 手机网页访问本机 dev server | adb reverse tcp:端口 tcp:端口 |
| 本机工具访问设备上端口 | adb forward tcp:... tcp:... |
| 看当前界面栈(粗) | adb shell dumpsys activity top 或 activities(输出大) |
| 无线调试(配对) | adb pair IP:配对端口 → adb connect IP:调试端口 |
| 无线调试(USB 切 TCP) | adb tcpip 5555 → adb connect IP:5555 |
| 分包安装 | adb install-multiple ... |
| 查 cmd 子命令 | adb shell cmd package help / cmd activity help |
| Java 调试链路 | adb jdwp → adb forward tcp:本地端口 jdwp:PID |
| 稳定性冒烟 | adb shell monkey -p 包名 --throttle ... -v ... |
延伸阅读
- Android 开发者:Android Debug Bridge (adb) --- 命令与行为以官方说明为准。
- SDK Platform Tools 发布说明 --- 下载与版本变更。
- logcat 命令行工具 --- 过滤与管道用法。
- UI/Application Exerciser Monkey --- 随机压测工具说明。
免责声明
本文为命令整理与工程经验向说明,不保证 在所有设备、ROM 与 Android 版本上行为一致。涉及刷机、解锁、分区写入、系统属性修改等操作前,请阅读 Android 开发者文档 、设备厂商指南并做好数据备份;因误操作导致的损失需自行承担。