battery-historian V2.0的数据获取及参数分析

时间:2024-03-26 19:52:30

简单来说,Battery historian是一款通过上传bugreport文件分析用户手机中App的电池耗电情况的工具。

那bugreport是什么,从哪里来,怎么用。
参照https://www.2cto.com/kf/201607/528696.html的介绍:

Android系统想要成为一个功能完备,生态繁荣的操作系统,那就必须提供完整的应用开发环境。而在应用开发中,app程序的调试分析是日常生产中进程会进行的工作。Android为了方便开发人员分析整个系统平台和某个app在运行一段时间之内的所有信息,专门开发了bugreport工具。这个工具使用起来十分简单,只要在终端执行(linux或者win): adb bugreport > bugreport.txt, 即可生成bugreport文件。

但是有一个问题是,这个生成的文件有的时候异常庞大,能够达到15M+,想一想对于一个txt文本格式的文件内容长度达到了15M+是一个什么概念,如果使用文本工具打开查看将是一个噩梦。因此google针对android 5.0(api 21)以上的系统开发了一个叫做battery historian的分析工具,这个工具就是用来解析这个txt文本文件,然后使用web图形的形式展现出来,这样出来的效果更加人性化,更加可读。

一、数据准备:

前提: 手机需要保证是开发者选项模式(安卓手机一般是打开设置,找到关于手机,点击版本号几次,直到出现开发者选项即可)。

1.先断开adb服务,然后开启adb服务

(1)adb kill-server
(2)adb start-server

由于开发时做电量记录是会打开很多可能造成冲突的东西,为了保险起见,重启adb命令。adb devices就会自动连接查找手机,也可以输入adb devices命令确认设备已被adb命令获取到

2.重置电池数据、收集数据

(3) adb shell dumpsys batterystats –enable full-wake-history
(4) adb shell dumpsys batterystats –reset
(5) adb shell logcat -c

通过以上命令来打开电池数据的获取以及重置,清除干扰的数据,清除历史日志。执行的效果如下:
battery-historian V2.0的数据获取及参数分析

3.获取电量报告
把数据线拔掉,防止数据线造成充放电数据干扰。然后做一些测试的case,经过一段时间后,重新连接手机确认adb连上了,运行以下命令来将bugreport的信息保存到txt文件中。

(6) adb bugreport >D:/bugreport.txt

或者用下面的命令也可以,官网上记述的内容,经实践,无法被读取…

(7) adb shell dumpsys batterystats > batterystats.txt

(8) adb shell dumpsys batterystats > com.example.app(包名) >batterystats.txt
ps:在此注意一定要等到该条命令执行完(稍微会有些慢)后,再打开bugreport.txt文件,之前遇到过没有导出完,就点开,信息缺失的情况,导致无法成功生成图表。

二、Battery History报告–各个参数的意义

手机系统不同,报告的内容可能会略有不同,图示为5.0.2系统。
battery-historian V2.0的数据获取及参数分析
1.横坐标:
横坐标是一个时间范围。以重置为起点,获取bugreport内容时刻为终点。坐标的间隔,会随着时间的长度发生改标。

2.纵坐标:

重要参数:wake_lock、plugged、battery_level、screen

具体说明:
1.battery_level:电量,可以看出电量的变化。
比如图中的数据显示出当前的电量为81%。
battery-historian V2.0的数据获取及参数分析
2.plugged:充电状态,这一栏显示是否进行充电,以及充电的时间范围。
大图中反应了在某一时间插入了数据线,然后一直持续到数据采集结束。

3.screen:屏幕是否点亮。
这一点,可以用于考虑睡眠状态和点亮状态下电量的使用信息。

4.top app:该栏显示当前时刻哪个app处于最上层,就是当前手机运行的app。

用来判断某个app对手机电量的影响,这样也能判断出该app的耗电量信息。该栏记录了应用在某一个时刻启动,以及运行的时间,这对我们比对不同应用对性能的影响有很大的帮助。

5.Userspace wakelock:该属性是记录wake_lock模块的工作时间。是否有停止的时候等。

ps:系统为了节省电量,CPU在没有任务忙的时候就会自动进入休眠。有任务需要唤醒CPU高效执行的时候,就会给CPU加wake_lock锁。

6.health:电池健康状态的信息,这个信息一定程度上反映了这块电池使用了多长时间。这一栏记录电池状态在何时发生改变,上面的图中电池状态一直处于good状态。

7.plug:充电方式,usb或者插座,以及显示连接的时间。

其余参数(有些参数还没有看到):

纵坐标 解释
CPU runing cpu运行的状态,是否被唤醒
Kernel only uptime 只有内核运行时间
Activity Manager Proc 活跃的用户进程
Mobile network type 网络类型
Mobile radio active 移动蜂窝信号 BP侧耗电
Crashes(logcat) 某个时间点出现crash的应用
Doze 是否进入doze模式
Device active 和Doze相反
JobScheduler 异步作业调度
SyncManager 同步操作
Temp White List 电量优化白名单
Phone call 是否打电话
GPS 是否使用GPS
Network connectivity 网络连接状态(wifi、mobile是否连接)
Mobile signal strength 移动信号强度(great\good\moderate\poor)
Wifi scan 是否在扫描wifi信号
Wifi supplicant 是否有wifi请求
Wifi radio 是否正在通过wifi传输数据
Wifi signal strength wifi信号强度(great\good\moderate\poor)
Wifi running wifi组件是否在工作(未传输数据)
Wifi on 同上
Audio 音频是否开启
Camera 相机是否在工作
Video 是否在播放视频
Foreground process 前台进程
Package install 是否在进行包安装
Package active 包管理在工作
Battery level 电池当前电量
Temperature 电池温度
Charging on 在充电
Logcat misc 是否在导出日志

参照链接:http://baijiahao.baidu.com/s?id=1577543442826249969&wfr=spider&for=pc
Android电量统计原理:http://duanqz.github.io/2015-07-21-batterystats-part1