安装与配置 Systrace:Android SDK、命令行工具、环境变量
说实在的,很多性能工程师刚开始用 Systrace 时,都卡在了环境配置这一关。我记得有个同事折腾了一下午,最后发现是 Python 版本不对。今天我就把这几年的踩坑经验整理出来,帮你一次性搞定。
4.1 你需要哪些东西?
先列个清单。这些东西缺一不可:
- Android SDK —— 至少 API 21 及以上版本
- Python 2.7 —— 注意,Systrace 的脚本基于 Python 2.7,虽然也能在 Python 3 下跑,但我建议直接用 2.7,省心
- adb 工具 —— 用于连接设备或模拟器
- Android 设备/模拟器 —— 需要开启开发者选项和 USB 调试
嗯,这里要提醒一下:Systrace 在 Android 10 之后已经被 Perfetto 逐渐替代了,但很多老项目和流水线还在用。你作为性能优化工程师,两个都得会配。
tools/ 目录,把 SDK、Python、自定义脚本都放进去。这样好管理,环境变量也干净。
4.2 Android SDK 安装与配置
你不需要装全套 Android Studio,只装 Command Line Tools 就够了。我一般这样操作:
- 去 https://developer.android.com/studio#command-line-tools-only(不输出链接,请参考手册)下载
commandlinetools-linux-*.zip(Windows/macOS 下对应版本) - 解压到
~/tools/android-sdk/ - 运行
sdkmanager安装 platform-tools 和 build-tools
# 解压
unzip commandlinetools-linux-*.zip -d ~/tools/android-sdk/
# 查看可用的包
~/tools/android-sdk/cmdline-tools/latest/bin/sdkmanager --list
# 安装必要组件
~/tools/android-sdk/cmdline-tools/latest/bin/sdkmanager "platform-tools" "build-tools;34.0.0"
我曾经遇到过一个坑:sdkmanager 报错 java.lang.NoClassDefFoundError,后来发现是 JDK 版本太高。我用 JDK 11 就没问题,建议你也用 11。
4.3 环境变量配置(关键一步)
配置不对,后面所有命令都找不到。我推荐把下面这几行加到 ~/.bashrc(或 ~/.zshrc):
export ANDROID_HOME=$HOME/tools/android-sdk
export PATH=$PATH:$ANDROID_HOME/platform-tools
export PATH=$PATH:$ANDROID_HOME/cmdline-tools/latest/bin
export PATH=$PATH:$ANDROID_HOME/build-tools/34.0.0
然后 source ~/.bashrc 生效。你可以用 adb version 和 sdkmanager --version 验证是否配置成功。
ANDROID_HOME,并且把 %ANDROID_HOME%\platform-tools 等路径加到 Path 中。记得重启命令行窗口。
4.4 安装 Python 2.7 与依赖
Systrace 捕获脚本 systrace.py 位于 Android SDK 的 platform-tools/systrace/ 目录下。它依赖 Python 2.7 和 win32pipe(Windows 下需要)。
我用 macOS 和 Linux 多一些,直接系统自带 Python 2.7 就行。但 macOS Catalina 之后移除了 Python 2,你得手动安装:
# macOS 用 brew
brew install python@2
# Ubuntu/Debian
sudo apt-get install python2.7
然后验证:
python2 --version
# 应该输出 Python 2.7.18
如果你在 Windows 上,我建议用 chocolatey 安装 choco install python2。别问我为什么非要 2.7,因为官方脚本就认这个版本。
.trace 文件解析时报错。后来老老实实用 Python 2.7,一次过。所以别偷懒。
4.5 验证 Systrace 是否可用
环境配好了,咱们跑个简单的命令试试:
# 列出可用参数
python2 $ANDROID_HOME/platform-tools/systrace/systrace.py -h
# 开始一个 5 秒的 trace,抓取 gfx 和 input 类别
python2 $ANDROID_HOME/platform-tools/systrace/systrace.py -t 5 gfx input -o trace.html
如果命令行没有报错,并且生成了 trace.html,说明你的环境搞定了。把 trace.html 拖进 Chrome 打开(chrome://tracing),你应该能看到时间轴。
你可能遇到的最常见报错:
| 错误信息 | 原因 | 解决办法 |
|---|---|---|
adb: command not found |
adb 不在 PATH 中 | 检查 $ANDROID_HOME/platform-tools 是否加到 PATH |
Internal error: Could not start trace |
设备权限不够或 Android 版本太低 | 确保设备开启开发者选项 + USB 调试,API 21 以上 |
TypeError: 'encoding' is an invalid keyword argument |
用了 Python 3 运行脚本 | 改用 python2 执行 |
No ACK from device |
adb 连接不稳定或设备被占用 | 重启 adb servers: adb kill-server; adb start-server |
4.6 知识结构一览
我把这一章的核心逻辑画成了一张图。你跟着图过一遍,避免遗漏:
4.7 快速验证清单
配置完成后,对照这张 checklist 过一遍,确保万无一失:
adb devices能看到你的设备python2 --version输出 2.7.x$ANDROID_HOME/platform-tools/systrace/systrace.py -h显示帮助信息- 设备已开启“开发者选项”和“USB 调试”
- 设备 Android 版本 ≥ 4.3(API 18),最好 ≥ 7.0 以获得更多 trace 类别