Battery Historian简单搭建
400 Words|Read in about 2 Min|本文总阅读量次
Battery Historain是谷歌开发的Android耗电量分析工具,其开发语言为go语言。使用这个工具可以将bugreport内容通过可视化界面更加直观的展示出来。
1介绍
battery historian是一款用于检测与电池有关的信息和事件的工具,运行在Android 5.0 Lollipop (API level 21)及其之后。它会生成一张具有时间坐标的图纸,用户可以查看各种事件耗电时间。本文使用的是win10操作,没有在Linux操作系统中依托docker搭建。
2自建Battery Historain环境
2.1配置环境
需要配置jdk(openjdk),go(golang),python,git(docker)环境
go的环境变量配置如下:
环境配置完成之后,目前工程下是空的。
2.2安装Battery Historain
环境配置结束后,安装Android工具Battery Historain。
2.2.1开始安装
1# 后面有三个点
2go get -d -u github.com/google/battery-historian/...
实际上不能完全下载下来,这个是因为不能够下载对应go的protobuf工程。
2.1.2下载依赖包
必须要到battery-historian工程目录下,执行命令
1go get -u github.com/golang/protobuf/proto
2go get -u github.com/golang/protobuf/protoc-gen-go
2.1.3执行 go run setup.go命令
1// 进入battery-historian目录
2cd battery-historian
3// 执行setup.go
4go run setup.go
这个过程,主要用于执行脚本,下载三方插件,包括flot-axislabels、closure-compiler和closure-library
如果下载不下来,或者有类似问题,可以直接使用离线下载,然后再把三个包放入对应的目录下即可
如果其中有对应js下载不下来,可能需要科学上网。
直到出现下面这张图,才是完成
2.1.4启动battery-historian.go
1// 启动battery-historian.go
2go run cmd/battery-historian/battery-historian.go
3 使用Battery Historain
3.1上传bugreport
低android版本,生成bugreport格式
1adb shell bugreport > bugreport.zip
将zip文件上传,等待工具分析,列出可视化界面,下图为红米3,系统为android5.0
高版本android版本,生成bugreport模式
1adb shell bugreportz
执行这个命令之后,原本的目录会发生变化,目前笔者使用红米5+,系统为android7.0
原本的在手机目录中的 bugreports文件会变成一个专门存放bugreport的目录
具体导入该zip文件,即为bugreport文件
参数含义
Battery Historain参数 | 含义 |
---|---|
CPU runing | cpu运行的状态 |
Kernel only uptime | 只有kernell运行 |
Userspace wakelock | 用户空间申请的锁 |
Screen | 屏幕是否点亮 |
Top app | 当前在内存中的应用,按内存占用率排序 |
Activity Manager Proc | 活跃的用户进程 |
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信号强度 |
Wifi running | wifi组件是否在工作(未传输数据) |
Wifi on | 同上 |
Audio | 音频子系统 |
Camera | 相机是否在工作 |
Video | 是否在播放视频 |
Foreground process | 前台进程 |
Package install | 是否在进行包安装 |
Package active | 包管理在工作 |
Battery level | 电池当前电量 |
Temperature | 电池温度 |
Plugged | 连接usb或者充电 |
Charging on | 在充电 |
Logcat misc | 是否在导出日志 |
本文篇幅内容不对具体分析做介绍
3.2Android性能优化之电量篇
特效篇:Android性能优化之电量篇 - http://hukai.me/android-performance-battery/
1// 得到整个设备的电量消耗信息
2$ adb shell dumpsys batterystats > xxx.txt
3// 得到指定app相关的电量消耗信息
4$ adb shell dumpsys batterystats > com.package.name > xxx.txt
5
6// 通过Google编写的python脚本把数据信息转换成可读性更好的html文件
7// https://github.com/google/battery-historian/blob/master/scripts/historian.py
8$ python historian.py xxx.txt > xxx.html
4目前遇到的问题
1.执行Android Historian脚本的时候,出现下面类似提示
1go: go.mod file not found in current directory or any parent directory; see 'go help modules'
go 的环境配置相关,设置GO111MODULE=auto
1//依次执行
2go env -w GO111MODULE=auto
3go mod init
4go mod verify
5go mod vendor
1.导入bugreport之后,然后运行Android Historian脚本,启动的网页UI没有很好的适配
需要科学上网,有部分js没有正确的下载下来
2.导入bugreport之后,然后运行脚本,打开网页全是字符串,正常的UI界面都没有显示
可能是导入的bugreport方式有误,例如android11部分机型,需要点击开发者模式中的错误报告,然后把对应手机侧的/bugreport目录下对应的bugreport重新导入,可以重新显示出来
3.执行对应的Android Historian脚本有大量的语法错误,类似
1/work/src/github.com/google/battery-historian/third_party/closure-library/closure/goog/streams/full_test.js:492: ERROR - Parse error. '(' expected
这个需要回退三方插件的版本号,将closure-library这个仓库回退到20170409稳定版本
可以用下面两种方式回退
第一种直接在官方下载对应版本,然后将版本对应替换到目标的三方插件目录下,官网地址是,点击这里,并找到对应的v20170409的版本
第二种直接通过git版本控制回退当前插件代码
1cd third_party/closure-library/
2git reset --hard v20170409
3cd -
4go run setup.go
3总结
总的来说,这是一种新的可视化方式,来解读Android的功耗相关。除了上述方式之外,如果还是不能够自建Android Historian工具,可以尝试其他的Battery Historain
线上环境,效果也是一样的,点击这里。
参考
[1] weixin_30871905, Android Historian安装使用,2019.
[2] 东名夜雨, closure-library 第三章 Closure基本库,2012.
[3] ,AaronDDD go安装proto、grpc、protobuf等工具失败,2021.
[4] 普通网友, 【Go报错】go go.mod file not found in current directory or any parent directory 错误解决,2022.
[5] 小木箱, 功耗优化 · 入门篇 · 浅析Android耗电量优化,2023.
[6] zeqiao, 电量分析工具 Battery Historian 的配置及使用 ,2017.