1、先说说什么是trace
trace是一种以perfetto.trace结尾的文件。一般用来分析卡顿、启动时间慢等问题,还可以用来分析方法耗时,android系统的性能、功耗等等问题。所需要使用到的网站是:
他的前身是Systrace,不过Perfetto更清晰,更强大。
2、如何抓取
考虑到很多小伙伴使用的系统是windows和ubuntu系统,这里提供这两种系统的抓取方式。
前提条件:对于抓取perfetto,android版本需要大于等于10, 我自己测试了下android 9 的发现抓不了,即使android 9 里面的bin路径下有perfetto依旧抓不了,会报错。如果安卓10的抓不了,在抓之前执行下命令:
adb shell setprop persist.traced.enable 1
对于android 9以下要想抓去trace只能使用systrace或者atrace
2.1、windows系统
这有个脚本可以直接使用。文件放在最后的网盘链接里了。
下载解压完成后,使用usb线连接手机或者车机,android车机的可能需要root,或者使用Debug版本。连接完成后使用adb devices查看是否成功连接。
点击go.bat会弹出一个命令窗口,此时就已经开始抓取了。你可以在手机或者车机上复现你想查看的场景。操作结束后,点击任意键结束录制。录制文件会保存在go.bat的同级目录下。
2.2、ubuntu系统
通过网盘链接下载base_config和record_android_trace。
record_android_trace是一个脚本文件
base_config是配置文件。
方法1, 直接配置trace tag
python3 record_android_trace -o trace_file.perfetto-trace -t 10s -b 32mb sched freq idle am wm gfx view binder_driver hal dalvik camera input res memory
其中 -t 表示录制时间,-b表示缓存大小,可以自定义。后面的就是需要抓取的数据。
# 抓perfetto 方法2,使用配置文件
python3 record_android_trace -c base_config -o trace_file.perfetto-trace
按CTRL+C结束录制,结束后会自动弹出Perfetto网站并加载文件。(推荐使用)
2.3、以上都抓取都无效的情况。
我在最近的实验中发现,上述方法可以抓取,但是Perfetto网站怎么也读取不成功,或者直接就是抓取失败。
如果上述两种方法都不行,那就只能使用adb命令进行抓取。
adb shell perfetto -o /data/misc/perfetto-traces/trace_file.perfetto-trace -t 20s sched freq idle am wm gfx view
adb pull /data/misc/perfetto-traces/trace_file.perfetto-trace
要更改抓取时间则将 -t 后面的值替换即可,如果要增加缓存大小,则加 -b 对应的大小值mb
3、除了Perfetto外其他抓trace的方法
在android 9 以及以下的版本是用不了perferro的,可以使用systrace或者atrace进行抓取。下面介绍两种方法:
3.1、systrace
systrace的工具在android SDK的platform tool的systrace里面。不过新版本的SDK已经移除了这个工具,需要下载33版本或者之前的。文章最后链接里有可自行提前。
首先你的python环境需要是2.7,python2.7下载链接:(Python 2.7.0 Release | Python.org),
确认你的android设备是user 可以root的,或者是userdebug的。
进入你的SDK的platform-tools/systrace目录下:
执行
python systrace.py am wm view app res ss gfx view hal bionic pm sched irq freq idle disk mmc load sync workq binder_driver binder_lock pagecache memreclaim dalvik input -t 5 -o systrace.html
具体用法可以使用python systrace.py --help 查看
Usage: systrace.py [options] [category1 [category2 ...]]
category可以使用 python systrace.py --list-categories查看
抓取结束后可以在google chrome的浏览器中输入chrome://tracing/ 进行分析,点击load加载刚抓取的systrace.html
3.2、atrace
开始抓取
adb shell atrace -b 25600 --async_start wm am gfx dalvik binder_lock binder_driver sched
停止抓取
adb shell atrace --async_stop -o /data/local/tmp/boot_trace
用法和systrace差不多
adb shell atrace --help 查看具体用法
usage: atrace [options] [categories...]
adb shell atrace --list_categories 查看可用的categories
抓取完成后需要用把boot_trace 从机器里pull出来,使用systrace.py转换成html格式才能在chrome://tracing/上面分析
转换命令:
Python systrace.py --from-file boot_trace -o output.html
4、文件提取处
链接: https://pan.baidu.com/s/1NZUKRaGnXi2Fj-Ph4Hby7g
提取码: 8p6f