Android ADB 命令教程与速查

Android ADB 命令教程与速查

ADB(Android Debug Bridge) 是 Android 开发与测试中最常用的命令行工具链,用于连接真机/模拟器、安装应用、执行设备端 Shell、抓取日志与做简单 UI 注入等。本文按功能模块 整理常用子命令、典型参数与注意点,并附场景速查 ;文中配有 Mermaid 示意图对照表 与少量 ASCII 示意 ,便于建立整体心智模型。子命令会随 Android 版本厂商 ROM 增减或行为变化,以官方文档与实机为准。

目录


ADB 是什么与基本环境

概念 说明
adb PC 侧客户端,与 adb server 、设备上的 adbd 通信。
adb shell 在设备上执行命令(或进入交互 shell)。
多设备 多台连接时用 -s <serial> 指定序列号。

使用前请开启设备的 开发者选项 → USB 调试 (或 无线调试 ),adb devices 中状态应为 deviceunauthorized 需在手机上点允许。

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 上,pmam 多为 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 类似:lscdpwdcatrmcpmvchmod 等。

写入 /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.comtest%40gmail%2Ecom
  • 中文 / 广义 Unicodeinput text 往往不可靠;可用 剪贴板 + 粘贴UI 自动化(如 uiautomator2 / Appium) 或应用内调试入口。
  • 外层 Shell(PowerShell / cmd / bash)对引号与 % 的解析不同;复杂字符串可先 adb shell 再执行 input text ...
  • 焦点需在可编辑控件内,否则可能「命令成功但界面无变化」。

剪贴板变通(注意非系统标准) :网络上常见 am broadcast -a clipper.set -e text "..." 依赖设备上安装了实现该 Action 的第三方剪贴板应用 ;粘贴可尝试 adb shell input keyevent 285KEYCODE_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 调试)

forwardreverse 对照(图 + 表)

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

appopssettings 行为与可用项因版本差异大,修改前建议确认含义与风险。


九、其他与版本差异

命令 / 话题 说明
adb backup / adb restore 旧式备份能力在较新系统上多已废弃或受限,勿依赖为唯一备份手段。
adb remount / adb disable-verity 涉及系统分区与校验,仅限明确知情的开发/调试镜像,误用可致设备无法启动。
adb emu 多与模拟器配套。
无线调试 Android 11+ 常见「无线调试」配对流程与旧版 tcpip 5555 方式并存,以当前系统界面为准。

十、Fastboot(独立工具,提要)

Fastbootadb 常一起出现在平台工具包中,但协议与用途不同:多用于 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 topactivities(输出大)
无线调试(配对) adb pair IP:配对端口adb connect IP:调试端口
无线调试(USB 切 TCP) adb tcpip 5555adb connect IP:5555
分包安装 adb install-multiple ...
查 cmd 子命令 adb shell cmd package help / cmd activity help
Java 调试链路 adb jdwpadb forward tcp:本地端口 jdwp:PID
稳定性冒烟 adb shell monkey -p 包名 --throttle ... -v ...

延伸阅读


免责声明

本文为命令整理与工程经验向说明,不保证 在所有设备、ROM 与 Android 版本上行为一致。涉及刷机、解锁、分区写入、系统属性修改等操作前,请阅读 Android 开发者文档设备厂商指南并做好数据备份;因误操作导致的损失需自行承担。

相关推荐
书中有颜如玉2 小时前
Kotlin Coroutines 异步编程实战:从原理到生产级应用
android·开发语言·kotlin
aq55356002 小时前
PHP7.2 vs 5.6:性能翻倍的关键升级
android
l1o3v1e4ding2 小时前
排查linux CentOS7.6的mysql(5.7.27)内存泄漏因OOM被系统kill的问题
linux·mysql·adb
java资料站7 小时前
Docker 快速部署 MySQL 主从复制(一主一从)
mysql·adb·docker
JJay.13 小时前
Android BLE 稳定连接的关键,不是扫描,而是 GATT 操作队列
android·服务器·前端
忒可君13 小时前
C# winform 自制分页功能
android·开发语言·c#
summerkissyou198713 小时前
Android-线程安全-volatile
android·线程
Trouvaille ~16 小时前
【MySQL】视图:虚拟表的妙用
数据库·mysql·adb·面试·数据处理·后端开发·视图
我命由我1234516 小时前
Android 开发中,关于 Gradle 的 distributionUrl 的一些问题
android·java·java-ee·android studio·android jetpack·android-studio·android runtime