本文主要记录了我使用systrace生成系统追踪文件的过程。
一、Systrace是啥?
顾名思义,就是系统跟踪,这里引用官网的一些描述
Systrace 是平台提供的旧版命令行工具,可记录短时间内的设备活动,并保存在压缩的文本文件中。该工具会生成一份报告,其中汇总了 Android 内核中的数据,例如 CPU 调度程序、磁盘活动和应用线程。Systrace 适用于 Android 4.3(API 级别 18)及更高版本的所有平台版本,但建议将 Perfetto 用于运行 Android 10 及更高版本的设备。
详细描述见官网系统跟踪概览。
嗯,不戳,刚看到就要过时了,建议大家不用看了,直接看Perfetto相关的文章得了。
二、那么,怎么安装呢?
1.首先需要安装Python
我们以终端命令行的方式,借由systrace.py脚本,执行系统跟踪相关命令,所以必须先安装大蛇Python。注意:Python版本必须是2.7.x系列,高了不行,高版本systrace会直接提示让你换2.7的。。。 本人最终安装了2.7.9版本。安装完成后还是老样子,配置好Python系统环境变量即可。
Python安装过程这里就不再赘述。
2.下载Android SDK Platform-Tools
打开你的Android SDK 目录,进入platform-tools文件夹,竟然没有systrace文件夹,是不是很惊喜?查看官网,哦,原来是被官网删除了,问题不大,我们找到release notes,找到是在哪个版本删掉的,然后下载它之前的版本就行了。
那啥,直接学Perfetto吧!
好的,我们直接下载33.0.0版本的平台工具到本地,然后解压就行了。
3.怎么用Systrace生成系统追踪html呢?
1. 首先打开终端,cd到你的这个目录E:\Android\platform-tools_r33.0.0-windows\platform-tools\systrace
2. 执行命令:
python systrace.py --list-categories
查看你的设备支持的可跟踪类别,如果成功,你将看到如下内容:
E:\Android\platform-tools_r33.0.0-windows\platform-tools\systrace>python systrace.py --list-categories
gfx - Graphics
input - Input
view - View System
webview - WebView
wm - Window Manager
am - Activity Manager
sm - Sync Manager
audio - Audio
video - Video
camera - Camera
hal - Hardware Modules
res - Resource Loading
dalvik - Dalvik VM
rs - RenderScript
bionic - Bionic C Library
power - Power Management
pm - Package Manager
ss - System Server
database - Database
network - Network
adb - ADB
vibrator - Vibrator
aidl - AIDL calls
nnapi - NNAPI
rro - Runtime Resource Overlay
pdx - PDX services
sched - CPU Scheduling
irq - IRQ Events
freq - CPU Frequency
idle - CPU Idle
disk - Disk I/O
sync - Synchronization
memreclaim - Kernel Memory Reclaim
binder_driver - Binder Kernel driver
binder_lock - Binder global lock trace
thermal - Thermal event
gfx - Graphics (HAL)
ion - ION allocation (HAL)
NOTE: more categories may be available with adb root
当然,你大概率看到如下失败信息:
E:\Android\platform-tools_r33.0.0-windows\platform-tools\systrace>python systrace.py --list-categories
Traceback (most recent call last):
File "systrace.py", line 48, in <module>
from systrace import run_systrace
File "E:\Android\platform-tools_r33.0.0-windows\platform-tools\systrace\catapult\systrace\systrace\run_systrace.py", line 41, in <module>
from devil import devil_env
File "E:\Android\platform-tools_r33.0.0-windows\platform-tools\systrace\catapult\systrace\systrace\..\..\devil\devil\devil_env.py", line 33, in <module>
import dependency_manager # pylint: disable=import-error
File "E:\Android\platform-tools_r33.0.0-windows\platform-tools\systrace\catapult\dependency_manager\dependency_manager\__init__.py", line 29, in <module>
from .archive_info import ArchiveInfo
File "E:\Android\platform-tools_r33.0.0-windows\platform-tools\systrace\catapult\dependency_manager\dependency_manager\archive_info.py", line 9, in <module>
from dependency_manager import exceptions
File "E:\Android\platform-tools_r33.0.0-windows\platform-tools\systrace\catapult\dependency_manager\dependency_manager\exceptions.py", line 5, in <module>
from py_utils import cloud_storage
File "E:\Android\platform-tools_r33.0.0-windows\platform-tools\systrace\catapult\common\py_utils\py_utils\cloud_storage.py", line 22, in <module>
from py_utils import lock
File "E:\Android\platform-tools_r33.0.0-windows\platform-tools\systrace\catapult\common\py_utils\py_utils\lock.py", line 20, in <module>
import win32con
ImportError: No module named win32con
怎么办呢?没这个模块那就想法安上它,下面是解决办法: 先后执行以下命令
curl https://bootstrap.pypa.io/pip/2.7/get-pip.py -o get-pip.py
python get-pip.py
python -m pip install pypiwin32
pip install six
再次执行
python systrace.py --list-categories
你将看到上文中的成功结果。
3.执行如下命令(具体要追踪哪些类目,参照上文中的categories,自己更改这个命令即可)
python systrace.py -o mynewtrace.html sched freq idle am wm gfx view binder_driver hal dalvik camera input res memory
然后操作你要追踪的app,进行你想追踪的操作,完成之后,再次按下Enter键,结束追踪并生成html报告文件。
4.查看html追踪报告
在E:\Android\platform-tools_r33.0.0-windows\platform-tools\systrace中,找到生成的追踪报告html:mynewtrace.html,打开chrome浏览器,访问这个网址:chrome://tracing/ , 点击右上角的
按钮,选择这个html文件即可打开,如下图:
好了,可以快乐地分析,是哪里导致你的app卡顿了。