美文网首页Android 优化相关
关于应用耗电量分析和优化(一)

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

作者: 蓝璃penn | 来源:发表于2019-07-18 19:41 被阅读0次
    统计设备耗电数据: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集中处理收到的任务,选择合适的时间,合适的网络,再一起执行

    相关文章

      网友评论

        本文标题:关于应用耗电量分析和优化(一)

        本文链接:https://www.haomeiwen.com/subject/nwwklctx.html