背景
android 上面有很多的方法可以分析开机时间 比如打log,通过log 分析。android 的官网上面提供了下面的两种图形化的方式来分析开机时间,一些异常很明显的拖长整个开机时间的活动
可以很容易就看出来。
问题
android 官网和网上的教程很多都不适用于windows 的平台。会出现各种不同的报错,下面是整理的适用于windows的方式。
一、 bootchart
-
生成bootchart.tgz
adb shell 'touch /data/bootchart/enabled'
adb reboot
# 开机后,pull出相关数据
adb shell 'tar -czf /sdcard/bootchart.tgz /data/bootchart'
adb pull /sdcard/bootchart.tgz .
-
window上面使用工具生成图像
下载 pybootchartgui。 将里面的main.py.in修改成main.py
先决条件:
需要先下载好python3以上的版本,
参考下面的文章
安装pycario,使用
pip install pycairo-1.19.1-cp38-cp38-win_amd64.whl
然后 将原先生成的压缩文件放到下载的 pybootchartgui里面 运行如下命令
就可以生成bootchart的图了。
python pybootchartgui.py --show-all -n -f png bootchart.tgz
网上其他方法都不行,要不生成的图是有问题的。
二、 用systrace进行分析
-
修改atrace.rc
这个文件在/system/core/init/底下,注释掉下面两句
# write /sys/kernel/debug/tracing/tracing_on 0
# write /sys/kernel/tracing/tracing_on 0
同时添加下面的这些
on property:persist.debug.atrace.boottrace=1
start boottrace
service boottrace /system/bin/atrace --async_start -b 30720 gfx input view webview wm am sm audio video binder_lock binder_driver camera hal res dalvik rs bionic power pm ss database network adb vibrator aidl sched
disabled
oneshot
-
修改build.prop
1. 在build.prop 中添加
debug.atrace.tags.enableflags=802922
adb shell setprop persist.debug.atrace.boottrace 1
2. 重启获取trace
adb root && adb shell atrace --async_stop -z -c -o /data/local/tmp/boot_trace
adb pull /data/local/tmp/boot_trace
三、 分析systrace
-
在chrome打开 Perfetto UI
-
分析,可以用搜索栏搜索StartActivityManager, 可以看到下列时间先后顺序的activity的启动流程。
点击具体的某一项 在详细信息栏中就可以看到start某个activity持续的时间。如果在activity中有看到某一项持续的时间很长的话,那就是可疑的一项。