安装与配置 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 逐渐替代了,但很多老项目和流水线还在用。你作为性能优化工程师,两个都得会配。

个人习惯:我通常在 $HOME 下建一个 tools/ 目录,把 SDK、Python、自定义脚本都放进去。这样好管理,环境变量也干净。

4.2 Android SDK 安装与配置

你不需要装全套 Android Studio,只装 Command Line Tools 就够了。我一般这样操作:

  1. 去 https://developer.android.com/studio#command-line-tools-only(不输出链接,请参考手册)下载 commandlinetools-linux-*.zip(Windows/macOS 下对应版本)
  2. 解压到 ~/tools/android-sdk/
  3. 运行 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 验证是否配置成功。

注意:Windows 用户需要在“系统环境变量”里添加 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,因为官方脚本就认这个版本。

实战避坑:我经历过一次 Python 3 也能跑,但生成的 .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 知识结构一览

我把这一章的核心逻辑画成了一张图。你跟着图过一遍,避免遗漏:

Systrace 安装配置知识结构 Android SDK platform-tools build-tools cmdline-tools Python 2.7 systrace.py 脚本 依赖:win32pipe 环境变量 ANDROID_HOME PATH 追加 Android 设备/模拟器 🔑 配置要点 你必须同时配齐 SDK、Python 2.7、环境变量,缺一不可。 运行 systrace.py 时,确保设备已连接且 adb 可用。 遇到报错先检查 Python 版本和 PATH,90% 的问题都在这里。

4.7 快速验证清单

配置完成后,对照这张 checklist 过一遍,确保万无一失:

  1. adb devices 能看到你的设备
  2. python2 --version 输出 2.7.x
  3. $ANDROID_HOME/platform-tools/systrace/systrace.py -h 显示帮助信息
  4. 设备已开启“开发者选项”和“USB 调试”
  5. 设备 Android 版本 ≥ 4.3(API 18),最好 ≥ 7.0 以获得更多 trace 类别
实际经验:我见过一个团队花了一周查帧率抖动,结果发现是环境没配好,生成的 trace 文件一直是空的。所以别急着分析问题,先确保你的工具链是通的。