Android 优化相关

关于应用耗电量分析和优化(一)

2019-07-18  本文已影响0人  蓝璃penn
统计设备耗电数据:Battery Historian工具(https://github.com/google/battery-historian

Battery Historian是一种在设备上电池时检查Android设备(Android 5.0 Lollipop及更高版本:API Level 21+)上的电池相关信息和事件的工具。它允许应用程序开发人员在时间线上可视化系统和应用程序级事件,并轻松查看自设备上次完全收费以来的各种聚合统计信息。

一. 使用Docker

docker -- run -p <port>:9999 gcr.io/android-battery-historian:2.1 --port 9999

之后在浏览器中输入 http://localhost: 就可以查看,然后上传bugreport文件进行分析了。

二. 源代码构建(源码编译)

1. battery-historian的安装
配置环境变量
GIT:D:\prgram\Git\bin
PATH:D:\program\Git\bin
检查git安装情况
cmd中输入git version
配置环境变量
PATH:D:\program\python2.7.12
检查python安装情况
cmd中输入python可以进入python环境
新建Go项目路径:GoProject
配置环境变量
GOBIN:D:\program\Go\bin
GOPATH:D:\program\Go\GoProject
GOROOT: D:\program\Go
PATH:%GOBIN%;%GOPATH%
检查Go语言安装情况
cmd中输入go version,查看是否安装成功;

注意:Battery Historian是Go语言的,安装Go的时候需要配置其bin的环境变量。
Python环境需要是2.7的(3.x不行), 建议使用pyenv管理本地的python环境。
另外,因为Battery Historian是一个网页版工具,,涉及一些JS引用,有时需要翻墙。

    $ go get -d -u github.com/google/battery-historian/…

下载完成之后,代码会下载到配置的GOPATH中,可以去检查下;

    $ cd $GOPATH/src/github.com/google/battery-historian

切换到那个目录,然后执行setup.go开始编译源码;

   go run setup.go

如果下载不成功别担心,可手动下载closure-libraryclosure-compilerflot-axislabels,解压放到GOROOT目录下third_party文件夹下方的closure-compiler、closure-library、flot-axislabels文件夹( ../battery-historian\third_party),如果没有均手动创建。

注意:这一步编译命令若是没成功,需要注意:C:\Users\Administrator\src\github.com\google\battery-historian\compiled,文件夹下的文件有没有成功下载:historian-optimized.js (不可少)

上面的步骤都完成之后就可以启动 Battery Historian了,默认端口是9999(注意还是在刚刚目录下执行)。

$ cd $GOPATH/src/github.com/google/battery-historian
$ go run cmd/battery-historian/battery-historian.go [--port <default:9999>]

待控制台输出listening on port:9999的时候,可以打开浏览器输入 http://localhost:9999 就可以看到。

2. battery-historian的使用:

Android 5.0及以上的设备, 允许我们通过adb命令dump出电量使用统计信息。

  1. 因为电量统计数据是持续的,会非常大, 统计我们的待测试 App 之前先 reset 下, 连上设备,命令行执行:
初始化android电池电量数据
$ adb shell dumpsys batterystats --enable full-wake-history

$ adb shell dumpsys batterystats --reset
Battery stats reset.
  1. 断开测试设备, 操作我们的待测试App;
  2. 重新连接设备, 使用adb命令导出相关统计数据:
$ adb shell dumpsys batterystats > xxx.txt  //得到整个设备的电量消耗信息
$ adb shell dumpsys batterystats > com.package.name > xxx.txt //得到指定app相关的电量消耗信息
或
// 此命令持续记录输出, 想要停止记录时按Ctrl+C退出。( Android 6.0及以下版本请使用该导出命令)
$ adb bugreport > bugreport.txt
或
// 将bugreport的信息保存到.zip文件中(Android 7.0及以上版本请使用该导出命令)
$ adb bugreport bugreport.zip

// 通过 historian 图形化展示结果
python historian.py -a bugreport.txt > battery.html

获取到bugreport文件之后,将其上传到Battery Historian上进行分析(http://localhost:9999),下面是它的输出结果打开(图形化展示电池的消耗情况)。

在页面的下方我们可以查看这段时间内系统的状态system stats,也可以选择某个应用查看应用的状态app stats:

分析图表.png

其中我们可以看到 Device estimated power use 中显示了估算的应用耗电量值为0.14%。

3. 报表中各参数的意义

重要的参数:WiFi、wake_lock、conn、mobile_ratio(蜂窝信号)

4. bugreport相关推荐

关于bugreport相关的知识推荐阅读Android adb bugreport工具分析和使用这篇文章,作者简单地从源码角度分析了adb bugreport命令的运行原理,结论是bugreport其实是启动了dumpstate service来输出数据,其中数据来源包括:
1.系统属性
2./proc和/sys节点文件
3.执行shell命令获得相关输出
4.logcat输出
5.Android Framework Services信息基本使用dumpsys命令通过binder调用服务中的dump函数获得信息

下面是其他的几篇关于battery-historian使用的文章可供参考:
(1) Android性能专项测试之battery-historian使用
(2) Android性能专项测试之Batterystats
(3) Battery Historian 2.0 for windows环境搭建
(4) Android应用耗电量分析与优化建议
(5)使用Battery Historian分析电源使用情况

5. 关于电量方面的Android性能优化

电量方面的性能优化可以参考:
性能优化典范中的Android性能优化之电量篇
Android App 优化之持久电量
Android性能优化-电量优化
Android后台调度任务与省电

(1)为了减少电量的消耗,在蜂窝移动网络下,最好做到批量执行网络请求,尽量避免频繁的间隔网络请求
(2)使用Job Scheduler,应用需要做的事情就是判断哪些任务是不紧急的,可以交给Job Scheduler来处理,Job Scheduler集中处理收到的任务,选择合适的时间,合适的网络,再一起执行

上一篇下一篇

猜你喜欢

热点阅读