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

统计设备耗电数据:Battery Historian工具(https://github.com/google/battery-historian

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

一. 使用Docker

  • 如果是使用Mac或Linux平台的话,推荐直接通过docker运行Battery Historian来完成;
docker -- run -p <port>:9999 gcr.io/android-battery-historian:2.1 --port 9999

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

  • 如果是使用Windows平台的话,也可以使用docker,但是机子要在BIOS中开启虚拟化(推荐使用源码编译);

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

1. battery-historian的安装
  • 首先下载配置Java环境 (要配置PATH);
  • 接着下载配置Git环境 (要配置PATH);
配置环境变量
GIT:D:\prgram\Git\bin
PATH:D:\program\Git\bin
检查git安装情况
cmd中输入git version
  • 接着下载配置Python 2.7环境 (要配置PATH,不能是3.7版本);
配置环境变量
PATH:D:\program\python2.7.12
检查python安装情况
cmd中输入python可以进入python环境
  • 接着下载配置Go环境 (要配置PATH和GOPATH以及GOBIN);
新建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引用,有时需要翻墙。

  • 前面的配置其实很快就能完成,接下来就是下载Battery Historian的源码来进行编译了;
    $ 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(蜂窝信号)

  • battery_level
    电量,可以看出电量的变化。比如图中的数据显示刚开始电量是100%,然后在第11秒-12秒中间的某个时刻降到了99%。


  • plugged
    充电状态,这一栏显示是否进行了充电,以及充电的时间范围。例如上图反映了我们在第22s插入了数据线,然后一直持续了数据采集结束。

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

  • top
    该栏显示当前时刻哪个app处于最上层,就是当前手机运行的app,用来判断某个app对手机电量的影响,这样也能判断出该app的耗电量信息。该栏记录了应用在某一个时刻启动,以及运行的时间,这对我们比对不同应用对性能的影响有很大的帮助。

  • wake_lock*
    wake_lock 该属性是记录wake_lock模块的工作时间。是否有停止的时候等。

  • running
    界面的状态,主要判断是否处于idle的状态。用来判断无操作状态下电量的消耗。

  • wake_lock_in*
    wake_lock有不同的组件,这个地方记录在某一个时刻,有哪些部件开始工作,以及工作的时间。

  • Sync
    是否跟后台同步。
    可以把鼠标停在某一项上面。可以看到何时sync同步 启动的,持续时间Duration多久。电池容量不会显示单一行为消耗的具体电量,这里只能显示使用电池的频率和时长,你可以看分时段的剩余电量来了解具体消耗了多少电量。

  • APP selection
    可查看某个应用的数据,如UID、CPU使用情况、相机调起次数等。

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集中处理收到的任务,选择合适的时间,合适的网络,再一起执行

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容

  • 随着Mobile App应用的不断演进,我们已经不能满足于仅仅实现功能,同时还要追求更高的质量和性能,因此耗电量、...
    sunnyaxin阅读 9,907评论 1 4
  • 晚夏短句集 -晚间楼下草丛堆 一阵阵锣鼓喧天的虫鸣蛙声 要赶走路人和夏夜似的 -给我的自由已太多 溢出来的 一天天...
    koko0阅读 429评论 0 1
  • 周末听老陈说,他要把饭店关了去西北溜达一圈,我调侃他有一颗放荡不羁的内心。 对老陈,我的感情是挺复杂的。佩服 惋惜...
    爱吃栗子的南门琦巧阅读 377评论 0 0
  • 我要孝顺妈妈 可是不知道怎么去孝顺妈妈 只是觉得给她钱 满足她的要求 听她的话就可以了 可我知道那不是爱 和妈妈的...
    竺子阅读 440评论 0 0
  • 首先把 cell xib中的控件 autolayout设置好后,保证xcode看起来没有错误。小白的我以为这样就没...
    谈渔樵耕读阅读 2,170评论 0 1