本文首要记录了我使用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卡顿了。