简单来说,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
通过以上命令来打开电池数据的获取以及重置,清除干扰的数据,清除历史日志。执行的效果如下:
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系统。
1.横坐标:
横坐标是一个时间范围。以重置为起点,获取bugreport内容时刻为终点。坐标的间隔,会随着时间的长度发生改标。
2.纵坐标:
重要参数:wake_lock、plugged、battery_level、screen
具体说明:
1.battery_level:电量,可以看出电量的变化。
比如图中的数据显示出当前的电量为81%。
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