adb 常用命令:从连接到诊断

做性能优化,手里没几把好用的工具可不行。adb 就是我工具箱里最常用的瑞士军刀。说白了,它是 Android Debug Bridge,能让你在电脑上指挥手机干这干那。我刚开始接触 Android 时,就靠这几条命令吃饭。今天咱们把最常用的五个命令掰开揉碎讲讲。

adb 常用命令体系 adb 核心命令 adb devices adb shell adb logcat adb dumpsys adb bugreport 用途:设备连接 → 执行命令 → 日志诊断 → 系统状态 → 完整报告 这五条命令涵盖了日常性能分析的 80% 场景

1. adb devices —— 先确认手机连没连上

每次开始调优,我第一件事就是敲 adb devices。这命令检测哪些设备在线,以及授权状态。你想想看,如果设备没连上,后面的命令全是白搭。

$ adb devices
List of devices attached
emulator-5554   device
R58MA3C8V7G    device

正常情况会显示 device。如果显示 unauthorized,说明手机弹了授权对话框你没点允许。我曾经因为忙着写代码,忘了点授权,查了半天问题,结果就是少点了个按钮。

我的习惯:每次插新设备先跑一次 adb devices。如果连接多个设备,用 adb -s <serial> 指定目标。

2. adb shell —— 钻进手机的肚子里

adb shell 就是给你一个远程终端,可以在手机上直接执行 Linux 命令。我经常用它来查看 CPU 频率、内存占用、进程列表。

$ adb shell
generic_x86:/ $ top -n 1
Tasks: 224 total,   1 running, 223 sleeping,   0 stopped,   0 zombie
Mem:  1882432K used,  213458K free,  102400K shrd,    6832K buff
Swap:       0K used,       0K free
$ exit  # 退出 shell

你也可以不进入交互模式,直接跟命令:

$ adb shell dumpsys meminfo com.example.app

这样做的好处是脚本化,方便批量收集数据。我写过一些自动化脚本,就是靠 adb shell 加各种系统命令来采集性能数据的。

3. adb logcat —— 看日志就像看监控

做性能优化,日志是主要信息来源。但全量日志太吵了,我一般会用过滤。你想想看,刷屏的日志里怎么找到你想要的那一行?

$ adb logcat -v time *:E               # 只看 Error 级别
$ adb logcat -v time | grep "MyTag"    # 过滤指定标签
$ adb logcat -c                        # 清空旧日志

-v time 是我最常用的,带上时间戳方便对照问题发生的时刻。有一次线上卡顿问题,我就是靠 adb logcat -v time -b main 抓到了某个第三方 SDK 的高频日志,定位到它在主线程写文件。

注意:性能测试时尽量不要一直挂着 logcat,它本身也会消耗一点资源。需要时再开,用完就关。

4. adb dumpsys —— 系统信息的百宝箱

这命令能拿到几乎所有系统服务的状态。电池、内存、CPU、Activity 栈、Window 信息……我通常用它来获取内存快照和帧率数据。

命令作用
adb dumpsys meminfo查看进程内存占用(PSS、Java Heap、Native Heap)
adb dumpsys gfxinfo获取最近 128 帧的渲染时间和 jank 信息
adb dumpsys battery电池状态、温度、电量
adb dumpsys cpuinfo各进程 CPU 占用

举个实际例子,我想知道某个页面掉帧情况:

$ adb shell dumpsys gfxinfo com.example.app
Profile data in ms:
      draw    prepare    process    execute
        0.25      0.12       0.08       0.30
        0.30      0.15       0.10       0.35
        16.8      0.20       0.12       0.40   ← 这帧超标了

看到超过 16ms 的帧,我基本就能断定这里有动画或布局问题了。我习惯把这个输出保存下来,跟不同版本对比。

实用技巧:配合 adb shell dumpsys 和 grep 可以快速定位。比如只看 Activity 栈:adb shell dumpsys activity | grep "mResumedActivity"

5. adb bugreport —— 一键生成体检报告

这个命令会把手机当前的系统日志、dumpsys 输出、dumpstate 等信息打包成一个 zip 文件。我遇到疑难杂症时,首选它。

$ adb bugreport bugreport_20250101.zip

生成的文件包含了 bugreport-xxx.txt 和 dumpstate-xxx.txt,里面记录了系统从开机到现在的各种信息,包括 WIFI、蓝牙、Sensor、App 崩溃、ANR 等。我记得有一次线上 ANR 率突然飙高,就是靠 bugreport 里的一条 "Input dispatching timed out" 锁定了问题进程。

不过要提醒你:这个命令耗时比较长(十几秒到一分钟),而且生成的文件很大(可能几十 MB)。生产环境慎用,最好在测试阶段用。

我的做法:在性能压测前跑一次 adb bugreport 作为基线;压测结束后再跑一次,对比两次的差异。

好了,这五个命令足够你应付大部分日常诊断了。从设备连接(devices),到进入系统(shell),到查看日志(logcat),再到系统状态(dumpsys),最后生成全量报告(bugreport),一条链路下来,没有搞不定的问题。下次遇到奇怪的现象,不妨先从这几个命令入手试试看。