Android性能调试工具:Systrace(一)命令行工具的安装
Systrace 是平台提供的旧版命令行工具(Android 10以上用的都是Perfetto工具),可记录短时间内的设备活动,并保存在压缩的文本文件中。
Systrace 工具会生成一份报告,其中汇总了 Android 内核中的数据,例如 CPU 调度程序、磁盘活动和应用线程。
Systrace 命令会调用Systrace工具,您可以借助该工具收集和检查设备上在系统一级运行的所有进程的时间信息。
如何搭建运行Systrace 命令的环境?
配置python环境
python包的下载地址:https://www.python.org/downloads/
这里选择2.7.x版本进行下载,因为python3.x版本不兼容systrace命令工具;
下载好后,进行安装,可自行选择安装目录,这里我选择的目录是“D:\Python27”
打开“D:\Python27”,有一个叫python.exe的文件,将该文件的路径添加至环境变量
打开windows的cmd,输入python --version,显示python版本号代表python环境变量添加成功
λ D:\Python27
python --version
λ Python 2.7.18
输入以下命令,安装第三方依赖库(不安第三方依赖库是用不来systrace命令行工具的)
#注意easy_install.exe所在目录为“D:\Python27\Scripts”
D:\Python27\Scripts\easy_install.exe pip
#python.exe已经被设置为环境变量
python -m pip install pypiwin32
python -m pip install matplotlib
(https://developer.android.com/topic/performance/tracing/command-line#syntax)
systrace
命令在 Android SDK 工具软件包中提供,并且可以在 android-sdk/platform-tools/systrace/
中找到。
将 android-sdk/platform-tools/
添加到 PATH
环境变量。
完成以上步骤,已经可以使用systrace行命令工具抓取systrace报告;
systrace命令行工具的语法
python systrace.py [options] [categories]
全局选项
#-h | --help 显示帮助消息。
python systrace.py -h
#-l | --list-categories 列出您的已连接设备可用的跟踪类别。
python systrace.py -l
命令和选项 说明
-o file 将 HTML 跟踪报告写入指定的文件。如果您未指定此选项,systrace 会将报告保存到 systrace.py 所在的目录中,并将其命名为 trace.html。
-t N | --time=N 跟踪设备活动 N 秒。如果您未指定此选项,systrace 会提示您在命令行中按 Enter 键结束跟踪。
-b N | --buf-size=N 使用 N KB 的跟踪缓冲区大小。使用此选项,您可以限制跟踪期间收集到的数据的总大小。
-k functions
|--ktrace=functions 跟踪逗号分隔列表中指定的特定内核函数的活动。
-a app-name
|--app=app-name 启用对应用的跟踪,指定为包含进程名称的逗号分隔列表。这些应用必须包含 Trace 类中的跟踪检测调用。您应在分析应用时指定此选项。很多库(例如 RecyclerView)都包括跟踪检测调用,这些调用可在您启用应用级跟踪时提供有用的信息。如需了解详情,请参阅定义自定义事件。
如需跟踪搭载 Android 9(API 级别 28)或更高版本的设备上的所有应用,请传递用添加引号的通配符字符 "*"。
--from-file=file-path 根据文件(例如包含原始跟踪数据的 TXT 文件)创建交互式 HTML 报告,而不是运行实时跟踪。
-e device-serial
|--serial=device-serial 在已连接的特定设备(由对应的设备***标识)上进行跟踪。
categories 包含您指定的系统进程的跟踪信息,如 gfx 表示用于渲染图形的系统进程。您可以使用 -l 命令运行 systrace,以查看已连接设备可用的服务列表。
命令的使用示例
python systrace.py -o mynewtrace.html sched freq idle am wm gfx view binder_driver hal dalvik camera input res
参考:https://developer.android.com/topic/performance/tracing/command-line#syntax