关于 batterystats 文件分析
- 这次比较系统的操作,不在用单个Python文件查看
耗电数据的采集
数据的采集是机器单方面的行为,不需要依赖第三方的辅助,因为这是 Android 系统级的功能。但在这之前,需要做一些准备。
请事先打开开发者模式。USB 接入计算机。在终端中执行:
adb shell dumpsys batterystats --enable full-wake-history
默认情况下,唤醒(wake)数据是不会被采集的,因此我们需要将其启用。如果采集的不是全量 wake up 数据,在分析阶段则不能很好的观测数据。
随后终端执行:
adb shell dumpsys batterystats --reset
此命令会清空历史采集的信息。
ps: 最后,拔出 USB。
很重要
现在,耗电统计已经开始了。没错,耗电统计就是一直开着的,并且无法关闭:这是一个系统级别的功能。
为什么要拔出 USB?因为如果你一直插着 USB ,如果电充满了,你的数据会被清空的。Batterystats 只会记录最后一次充满电后的记录,因此强烈建议先把电充满,完成以上操作后,拔出 USB 电源。
接下来,就像日常使用手机一样,操作你想要统计的应用。耗电记录器会在后台统计整台机子所有的耗电情况。没错,不需要事先指定目标 App ,所有 App 都会被统计。这也说明,任何人都能够统计任何已安装的应用。因此,除了统计自家 App ,也能用于统计竞品。
当你觉得操作得差不多了,连接到 USB,终端执行:
adb bugreport > bugreport.txt
bugreport.txt 就是记载着整台手机耗电信息的源数据。
最后终端执行:
adb shell dumpsys batterystats --disable full-wake-history
不要忘了关闭全量记录唤醒。保持开启会造成性能问题,除非在电量收集阶段,否则建议保持关闭。
搭建 Battery Historian & 上传 bugreport
Battery Historian ,是谷歌出品的耗电分析器。通过 Battery Historian,可将导出的 bugreport
文件可视化。在第一代的 Battery Historian 中,google 使用了 python 作为数据解析工具。拿到 bugreport
文件后,通过终端执行 python 来生成可视化的 html 文件。这种方法使用起来较为麻烦,而且无法部署到服务器。因此在第二代 Battery Historian,google 选择了使用 docker 容器。现在完全不推荐使用第一代 Battery Historian,已经许久没有维护了,而且功能过于简陋。
我在此演示 Mac 环境的搭建,其他操作系统大同小异,可参考 Battery Historian 官方教程。
首先下载 Docker 并安装。
启动 Docker。点击上方状态栏 Docker 图标,如图所示 "Docker is running" 则表示启动成功。
分析
下一步,启动终端,执行:
docker run -p 5665:9999 gcr.io/android-battery-historian/stable:3.0 --port 9999
等待镜像下载完成,再次执行上一条命令。
访问 http://12.0.0.1:5665
除了单一上传 bugreport 文件外,还支持更多的分析文件上传。此外,还能对比两份bugreport文件。这对比功能简直是神器。这里就不展开述说了,直接上传 bugreport.txt。
PS: 但是我失败了,导出文件有一个自动生成的zip文件,上传这个
数据分析分为三个 Tables,分别是 System Stats , History Stats , App Stats。System Stats 和 App Stats 是重点观测和分析对象。
System Stats 包含了机子整体概况,包括整台机子在这段期间消耗了多少电量,所有 app 使用 Wakelocks、JobScheduler、CPU、Wifi、传感器等等一切的所有情况。
接下来则是 App Stats,所有的优化都是为了此处的数据而努力。
App Stats
App Stats 所展示的都是所选定包名所产生的数据,不会受到外部因素的影响。
Misc Summary 部分概述了所选定 app 在收集阶段的活动概况:
主要看WakeLock, WakeAlarm
最后,再来看看 Sensor Use 部分:
这些都是分析用的。重要的是,有个name 框,选择你app 的package name
错略分析,接下来研究精细分析和解决方案
网友评论