重要性
- wms和ams的一些系统原生日志能够帮助我们快速定位问题
日志分类
在日常framework工作中常见的日志类别如下:
-b , --buffer= Request alternate ring buffer, ‘main’,
‘system’, ‘radio’, ‘events’, ‘crash’, ‘default’ or ‘all’.
Additionally, ‘kernel’ for userdebug and eng builds, and
‘security’ for Device Owner installations.
Multiple -b parameters or comma separated list of buffers are
allowed. Buffers interleaved. Default -b main,system,crash.
-
main日志:日常使用的Log.e/Log.w/Log.i等等(andoird.util.log)
抓取时,可以使用logcat -b main
来指定抓取main日志 -
system日志:源码中使用Slog.e…等
抓取时使用logcat -b system
-
events日志:源码中使用
EventLog.writeEvent
打印,可以观察到窗口的很多信息,比如onStart、onResume等等
例如我将一个app切后台后,重新拉起,直接使用 adb logcat | grep 进程号得到如下的日志信息。
如果使用 adb logcat -b events:
(切后台日志)
(后台重新拉起)
上面两个图是在aosp11环境中打印的,在AOSP13中tag会发生变化,我们如果想要找到源码中的这行日志打印的地方,可以通过如下的拼接方式找到对应的源码位置。
一般来说,带有on_wm、on_am等等,可以发现都是在应用进程进行打印的。
如果不想单独看events的日志,可以使用 logcat -b all -
crash日志 - kernel日志 - 其他
ProtoLog动态开关某一部分功能的日志
ProtoLog是google增加的动态打开某一个功能日志的开关能力,用于针对某一功能进行调试或者开发时,能够更加方便。
在android10里面,这部分功能还没有