准备工作:开启开发者选项与USB调试
做 SystemUI 启动耗时分析,第一步不是写代码,是先把环境搭好。我见过不少同学拿着手机就想抓 trace,结果发现开发者选项都没开,adb 连不上——这就尴尬了。
这一节我们把这些基础操作搞定。你想想看,如果连调试通道都不通,后面所有手段都用不上。来,咱们一步步走。
为什么必须开启开发者选项?
Android 系统默认把很多调试接口藏起来了。说白了,就是为了防止普通用户误操作。但我们做系统开发,需要访问这些接口:
- 抓取 trace:需要 systrace 或 perfetto 权限
- 查看日志:logcat 的输出级别限制
- 模拟输入:用 adb shell input 操作 UI
- 高级调优:比如窗口动画缩放、过渡动画缩放
开启开发者选项,就是给系统一个信号:“我是开发者,请给我完整权限。”
开启步骤(以 Android 13 为例)
操作非常简单,但不同厂商略有差异。我习惯记一个通用方法:
- 进入「设置」→「关于手机」
- 找到「版本号」(Build Number),连续点击 7 次
- 提示“您已处于开发者模式”
- 返回「设置」主页面,底部多出一个「开发者选项」
关键开关:你需要打开什么?
进了开发者选项,里面一堆开关。别慌,我们只开几个必要的:
| 开关名称 | 用途 | 建议值 |
|---|---|---|
| USB 调试 | 允许 adb 连接设备 | 开启 |
| “仅充电”模式下允许 ADB 调试 | 连接 USB 后默认使用 adb | 开启(可选) |
| 窗口动画缩放 | 影响动画耗时,调小便于观察 | 0.5x 或关闭 |
| 过渡动画缩放 | 同上 | 0.5x 或关闭 |
| 动画程序时长缩放 | 控制动画整体时长 | 0.5x 或关闭 |
| 显示布局边界 | 调试 UI 层级时可用 | 按需开启 |
USB 调试的坑与避坑指南
USB 调试是 adb 的基础。很多人开了却发现连不上,原因无非这几条:
- USB 线不行:有些线只支持充电,不支持数据传输。换原装线试试。
- 驱动没装:Windows 上需要安装对应厂商的 USB 驱动。Mac 和 Linux 一般免驱。
- 授权弹窗没点:第一次连接时手机会弹 RSA 密钥确认框,必须点「允许」。
我个人习惯,拿到新手机第一件事就是插线、开 USB 调试、点「始终允许这台计算机」。避免后来每次都要确认。
验证调试环境
开好之后,我们验证一下。打开终端,输入:
adb devices
正常输出类似:
List of devices attached
ABCDEF123456 device
如果显示 unauthorized,说明手机没授权。看看手机屏幕,确认 RSA 指纹。
如果显示 offline,可能是线的问题或者 adb 版本太老。重新拔插或升级 adb 试试。
我遇到过最奇葩的一次:某厂商定制系统,USB 调试默认被系统策略禁止。必须进工程模式才能解开。后来我直接写了个脚本把常用套路都试了一遍。
启动耗时分析的特殊需求
我们分析 SystemUI 启动,光有 adb 还不够。还需要开启一些 profiling 相关的开关:
- 系统跟踪(System Tracing):在开发者选项底部,可以开启「记录跟踪」。建议打开,并选择「长按音量键开始跟踪」或「快捷设置磁贴」。
- GPU 呈现模式分析:选择「在屏幕上显示为条形图」,可以直观看到每一帧的绘制耗时。
- 不保留活动:分析冷启动时建议关闭(默认关闭),否则每次切后台 activity 都被销毁。
还有一个容易被忽略的点:屏幕超时时间。分析过程中如果屏幕自动熄灭,某些 system_server 的锁会释放,影响结果。我习惯把休眠时间设成 30 分钟或永不。
本章知识体系一览
一点补充:关于厂商定制
小米、华为、OPPO 等厂商经常魔改开发者选项。比如有的把「开发者选项」直接隐藏,需要特殊暗码才能进入。我曾在某款手机上找了半小时才发现入口在「设置→更多设置→开发者选项」。如果你找不着,直接搜“版本号”或者去官网查一下。
还有一点:国产 ROM 有时会默认关闭 adb 的 root 权限。不过我们做启动耗时分析,不需要 root,普通 shell 权限就够了。除非你想直接操作 /data/local/tmp 下的 trace 文件——那时可以开 root 调试,但平时别开,安全第一。
常见问题快问快答
- Q: adb devices 找不到手机? A: 换线、重启 adb server(adb kill-server后adb start-server)、检查驱动。
- Q: 点了“允许”后仍然 unauthorized? A: 重新拔插,或在手机上撤销USB调试授权后重新授权。
- Q: 系统跟踪无法启动? A: 看看存储空间够不?或者有没有其他app占用 trace 接口。
环境准备这块看似简单,但出了错后面全白费。我建议你花 10 分钟把这一步走通,然后跑一遍 adb shell dumpsys 检验一下权限。后面咱们就开始抓 trace 了。