安卓手机adb 抓取systrace开始和结束的命令
时间: 2025-06-20 16:22:55 浏览: 12
<think>好的,我现在需要帮用户解答关于如何使用ADB抓取systrace的开始和结束命令的问题。首先,我得回想一下用户之前的问题,他之前问了关于Uninterruptible Sleep状态,现在转向了实际操作,如何抓取systrace。这说明用户可能在进行性能分析,遇到了线程阻塞的问题,现在需要实际操作的指导。
用户可能是一名Android开发者,或者正在做性能优化相关工作。他们可能已经知道systrace的基本用途,但需要具体的命令行步骤。我需要确保给出的命令准确,并且涵盖不同的Android版本,因为不同版本可能有不同的方法。
首先,我应该区分Android 9(API 28)及以上的版本和更早的版本,因为从Android 9开始,systrace被Perfetto取代,但可能仍支持旧命令。用户可能需要同时知道新旧方法,以确保兼容性。
接下来,我需要详细写出开始和结束的命令,包括参数说明,比如时间、输出文件、要跟踪的类别等。同时,要提醒用户关于注意事项,比如需要启用USB调试,是否有root权限等。此外,可能还需要提到如何自动结束抓取,或者手动停止的方法,比如Ctrl+C。
还要考虑用户可能遇到的常见问题,例如命令无法执行,或者输出文件找不到,这时候需要给出排查建议,比如检查Python环境,ADB是否正确连接等。另外,用户可能需要知道如何查看生成的文件,推荐使用Perfetto UI,并提供链接。
最后,要确保语言简洁明了,步骤清晰,避免使用过于专业的术语,但也要准确无误。可能用户是第一次使用systrace,所以需要给出完整的命令示例,包括参数的具体值,比如时间设为5秒,输出文件名等。
总结一下,我需要分步骤介绍命令,涵盖不同Android版本,解释每个参数的作用,给出示例,注意事项,以及后续分析工具的使用方法。这样用户能够按照步骤操作,解决实际问题,同时避免常见错误。</think>以下是使用 **ADB 抓取 systrace** 的核心命令和操作步骤,适用于 Android 性能分析场景:
---
### **1. 基础命令(Android 9 及以上)**
从 Android 9(API 28)开始,官方推荐使用 **`perfetto`** 替代传统 `systrace`,但仍兼容旧命令。
#### **(1) 启动抓取**
```bash
# 通用命令格式
python systrace.py [options] [categories]
# 示例:抓取 10 秒,跟踪 CPU、图形、磁盘 I/O 等核心事件
python systrace.py -t 10 -o output.html sched freq idle am wm gfx view binder_driver hal dalvik disk input
```
#### **(2) 手动控制开始/结束(需 root 权限)**
```bash
# 开始抓取(后台运行)
adb shell "atrace --async_start -b 16384 gfx input view webview wm am sm audio video camera hal res dalvik rs bionic power pm ss database network adb sched irq freq idle sync disk workq memreclaim regulators"
# 结束抓取并导出结果
adb shell "atrace --async_stop" > trace.txt
adb pull /sys/kernel/debug/tracing/trace trace.raw
```
---
### **2. Perfetto 命令(Android 10+ 推荐)**
Android 10 及以上默认集成 **Perfetto**,提供更强大的跟踪功能:
#### **(1) 基础抓取**
```bash
# 通过 ADB 触发 Perfetto 抓取(默认 10 秒)
adb shell perfetto -o /data/misc/perfetto-traces/trace_file.perfetto-trace -t 10s sched freq idle am wm gfx input disk
```
#### **(2) 自定义配置**
```bash
# 生成配置文件(JSON 格式),定义跟踪参数
echo '
buffers: { size_kb: 100000 }
data_sources: { config { name: "linux.process_stats" } }
duration_ms: 5000
' > config.pbtx
# 执行抓取
adb shell perfetto -c /data/local/tmp/config.pbtx -o /data/local/tmp/trace.perfetto-trace
adb pull /data/local/tmp/trace.perfetto-trace
```
---
### **3. 关键参数说明**
| 参数 | 作用 |
|------|------|
| `-t N` | 抓取时长(秒) |
| `-o FILE` | 输出文件名(默认 `trace.html`) |
| `-b SIZE` | 缓冲区大小(KB,防溢出) |
| `categories` | 指定跟踪的事件类别(如 `gfx` 图形、`input` 触控) |
---
### **4. 注意事项**
1. **环境依赖**:
- 确保 Python 2.7 环境(传统 systrace 需要)和 `systrace.py` 文件(位于 Android SDK 的 `platform-tools/systrace` 目录)。
- Perfetto 无需额外配置,但需 ADB 版本 ≥ 1.0.40。
2. **权限要求**:
- 部分内核事件(如 `binder_driver`)需要 **root 权限** 或 **eng 模式**。
- 普通应用进程跟踪可使用 `debug` 权限。
3. **文件导出**:
- 使用 `adb pull` 导出文件时,注意目标路径是否可读。
- Perfetto 文件需通过 **[Perfetto UI](https://ui.perfetto.dev)** 解析。
---
### **5. 结果分析**
- **传统 systrace**:用 Chrome 浏览器打开 `.html` 文件(访问 `chrome://tracing`)。
- **Perfetto**:上传 `.perfetto-trace` 文件到 **[Perfetto UI](https://ui.perfetto.dev)**。
---
通过上述命令,可灵活抓取 Android 系统的运行时行为,定位性能瓶颈(如 `Uninterruptible Sleep` 状态)。
阅读全文
相关推荐



















