查看手机电量信息:adb shell dumpsys battery

设置电池为充电状态——adb shell dumpsys battery set status 2

设置电池为非充电状态——adb shell dumpsys battery set status 1

设置电量百分比——adb shell dumpsys battery set level 100

复位,恢复实际状态——adb shell dumpsys battery reset

设置断开充电(Android 6.0以上)——adb shell dumpsys battery unplug              ——软件角度模拟断开充电(实际上是充进电)

==================================================================================================

==================================================================================================

获取整个设备的电量消耗信息: adb shell dumpsys batterystats  | more
获取某个apk的电量消耗信息:  adb shell dumpsys batterystats  包名 | more

C:\Users\del>adb shell dumpsys batterystats | more > C:\Users\del\Desktop\a.txt

C:\Users\del>adb shell dumpsys batterystats com.wawj.app.t | more > C:\Users\del\Desktop\a.txt

==================================================================================================

==================================================================================================

清除已有的耗电量数据——   adb shell dumpsys batterystats --enable full-wake-history

设备耗电量数据重置——   adb shell dumpsys batterystats --reset

==================================================================================================

==================================================================================================

电量分析工具Battery Historian的环境搭建与使用

Battery Historian 是一个这样的的工具:可以在 Android 5.0 Lollipop(API 级别21)及更高版本的 Android 设备上检测与电池相关的信息和事件,而在此期间,该设备没有插上电源。它允许应用程序开发人员在时间轴上可视化系统和应用级别的事件,并使用平移和缩放功能,在设备最后一次完全充电之后,可以轻松地查看各种聚合统计信息,可以选择一个应用程序,检查所选择的应用程序对电池指标的影响。此外,它还允许对两个错误报告进行 A/B 比较,突出显示了关键电池相关指标的差异。

环境配置

(1)安装Go编程语言

点击下载go语言。
配置GOROOT、GOPATH、PATH环境变量。

GOROOT

GOPATH

Path

检查是否安装成功:cmd 执行 “go version”

(2)安装 Python

下载:https://www.python.org/ 【注意仅支持 python 2.7,python3.0改变很大】

安装

配置环境变量

Paste_Image.png

检查是否安装成功:cmd 执行 “python –V”【注意是大写V】

(3)安装Git

下载:https://git-scm.com/

安装

检查是否安装成功:cmd 执行 “git version”

(4)下载 Battery Historian 源码并且运行
  1. cmd 执行“go get -d -u github.com/google/battery-historian/...”【注意最后有三个点】

下载成功后会在GOPATH(我自己建的工作空间文件目录)下生成src文件夹

  1. 进入到$GOPATH/src/github.com/google/battery-historian目录下方

  2. 运行Battery Historian

cmd 执行“go run setup.go”【第一次执行要下载,时间会久一些,以后就快些】

ps:http://blog.csdn.net/feitian_666/article/details/52756522 提供了一个在没有下载成功情况下补充“go run setup.go”的方法:手动下载【closure-library】和【closure-compiler】和【flot-axislabels】,解压放到 GOROOT 目录下 third_party 文件夹下方的的 closure-compiler、closure-library 和flot-axislabels 文件夹,如果没有均手动创建。

cmd 执行go run cmd/battery-historian/battery-historian.go 

  1. 检查/battery-historian是否运行
    登录网址 http://localhost:9999查看是否加载运行battery historian。

    G@~)M7WYR)R@T_(V9P%@5JV.png

使用

(1).初始化

battery-historian工具需要使用bugreport中的Battery History,因此需要如下的操作。
重启adb服务:

adb kill-server
adb start-server

这一步很重要,因为当我们开发时做电量记录时会打开很多可能造成冲突的东西。为了保险起见我们重启adb。
通过以下命令来打开电池数据的获取以及重置:

adb shell dumpsys batterystats --enable full-wake-history
adb shell dumpsys batterystats --reset

上面的操作很重要,因为可以过滤掉不需要的数据。然后断开数据线(防止数据线造成充放电数据干扰),运行自己的APP进行测试。

(2)导出手机的 Bugreport 文件

重新连接USB调试,通过下面的命令获取数据:

adb bugreport bugreport.zip(6.0以及以下的,使用adb bugreport > bugreport.txt导出)

你在哪个目录下执行adb bugreport bugreport.zip 就会在哪个目录下生成 bugreport.zip文件

(3)上传bugreport.zip文件至 http://localhost:9999

最后

注意:7.0以下的,需要使用旧版本的adb工具,不然没法采集,参考文章http://blog.csdn.net/mwq30123/article/details/53888449
注意:官方SDK文档导出文件方式为:adb shell dumpsys batterystats > batterystats.txt。使用python historian.py batterystats.txt > batterystats.html查看数据。这是battery-historian老版本的使用方式. 目前Battery Historian已更新2.0版本, 推荐使用bugreport方式导出数据分析, 可以看到更多信息。
注意:模拟器可能获取不到有用的电量数据,网页没有显示电量信息,如下图所示:

模拟器的bugreport

真实手机的bugreport

android电量统计的原理可以参看这篇文章:http://duanqz.github.io/2015-07-21-batterystats-part1

大致原理摘录如下:

一、电量记录
1. Android在进行电量统计时,并不是采用直接记录电流消耗量的方式,而是跟踪硬件模块在不同状态下的使用时间,收集一些可用信息,用来近似的计算出电池消耗量。

举一个例子,假定某个APK的使用了GPS,使用时间用 t 表示。GPS模块单位时间的耗电量用 w 表示,那么,这个APK使用GPS的耗电量就可以按照如下方式计算:
耗电量 = 单位时间耗电量(w) × 使用时间(t)
frameworks.jar里的frameworks/base/core/res/res/xml/power_profile.xml这个文件,记录着各个模块单位时间的耗电量, 由厂商定义。
以下是Nexus 5(hammerhead)耗电参数配置的代码片段:

<device name="Android"> <!-- All values are in mAh except as noted --> <item name="none">0</item> ... <item name="wifi.on">3.5</item> <item name="wifi.active">73.24</item> <item name="wifi.scan">75.48</item> ... <item name="battery.capacity">2300</item> </device> 

2. Android框架层通过一个名为batterystats的系统服务,实现了电量统计的功能。

收集信息被组织起来,在内存中的数据结构是由BatteryStats类描述的。 为了能够从不同维度统计耗电量,这个数据结构设计得比较复杂,我们不在这里展开讨论,仅通过一个收集应用程序前台运行时间的例子,来说明信息收集过程。
记录应用程序中所有Activity从显示状态(Resumed)到消失状态(Paused)的时间,就能够统计应用程序的前台运行时间。Activity状态的切换是由AMS掌控的,因此AMS需要将Activity的状态信息通知给batterystats服务。

当Activity要切换到显示状态(Resumed)时,
会调用ActivityStackSupervisor.resumeTopActivitiesLocked()方法, 接下来会调用ActivityStack.resumeTopActivityInnerLocked()方法来完成Activity的状态切换,在完成状态切换后, 会调用 ActivityStackSupervisor.reportResumedActivityLocked()方法,从这里开始,就开始通报了:“本Activity已经进入了显示状态”。 在ActivityStackSupervisor.reportResumedActivityLocked()中得到BatteryStatsImpl对象, 并启动一个计时器(StopwatchTimer), 记录下了启动时间.在Activity pause时, 再得到结束时间, 这样就得到了应用程序的acitiviy在前台的运行时间了。 

除了应用程序前台运行时间,还有很多信息是batterystats服务关注的,包括WakeLock、Sendor、Wifi、Audio、Video等,这些信息的采集方式与上述过程雷同,都会经过以下步骤:

由相应的模块发起状态变更的通知
BatteryStats使用定时器记录起止时间

二、电量信息的储存

Android支持历史电量信息的显示的,如果重新启动Android,那内存中的数据就丢失了, 所以需要把这些信息存储到磁盘上,磁盘上的 /data/system/batterystats.bin 文件中就是电量信息的序列化数据。
batterystats服务启动时,会从 batterystats.bin 这个文件中读取数据,来初始化BatteryStats这个数据结构。

三、电量计算

BatteryStatsHelper.refreshStats()承载了电量计算的全部过程,在需要显示电量统计信息的地方,就可以通过BatteryStatsHelper这个类,来获取统计完成的电量信息。 Setting.apk就引用了这个类。电量计算大体可以分为两块:

1. AppUsage:应用程序耗电量计算,是指每一个应用程序使用硬件模块所产生的耗电量

在BatteryStatsHelper.processAppUsage()这个方法中,实现了应用程序的电量计算(实际上统计的粒度是uid,不同的apk可以运行在同一个uid)。

2. MiscUsage:其他杂项耗电量计算

所谓杂项,其实就是用户比较关心的一大类,包括:待机的耗电量、亮屏的耗电量、通话的耗电量、Wifi的耗电量等,这个统计是系统层面的, 作为app的开发人员可以忽略掉这部分内容。

我们来总结一下应用程序的电量计算过程。Android通过一个名为BatteryStats.Uid的数据结构来维护一个应用程序的电量统计信息。 这个数据结构中,又包含很多子结构:

Proc:表示属于Uid的进程,一个Uid中可能会有多个进程,每个进程都有CPU占用时间
WakeLock:表示Uid持有的WakeLock锁的电量统计,一个Uid也可能会持有多个锁
Mobile Radio:表示Uid使用数据流量的电量统计,譬如3G流量、4G流量
Wifi:表示Uid使用wifi的电量统计
Sendor:表示Uid使用传感器的电量统计
Android提供的dumpsys命令用于查看系统服务的信息, 将batterystats作为参数,就能输出完整的电量统计信息。

adb shell dumpsys batterystats

参考链接:https://www.jianshu.com/p/1cf7c690a4d2

================================================================================================

准备条件

充电100%后再多充30分钟后开始测试

关掉其他app排除影响

相同屏幕亮度,最大最好

设置屏幕不自动关闭

使用charles 3G网络限速

每次留bugreport

每次都要重新安装app(或者清楚数据),保证耗电量从0开始计算

无线adb技术

安装adb【各种baidu就行】

确保手机跟电脑都处于同一个网络

手机插线连着电脑,确保已连接上,使用【adb devices】命令check,是否连接

输入【adb tcpip 5555】,使用tcpip协议连接手机

1.无线连接手机

adb connect 192.168.1.8

2.清除已有的耗电量数据

adb shell dumpsys batterystats --enable full-wake-history

3.设备耗电量数据重置

adb shell dumpsys batterystats --reset

4.寻找包名的uid

adb shell ps |find "com.nuomi"

以下是dos下出来的信息,u0_a445就是uid,需要去除下划线_,  即u0a445

u0_a445   7068  772   1646920 85320 SyS_epoll_ 0000000000 S com.nuomi:installdex
u0_a445   7158  772   1854944 226048 SyS_epoll_ 0000000000 S com.nuomi
u0_a445   7190  772   1663432 89120 SyS_epoll_ 0000000000 S com.nuomi:ultranet
u0_a445   7208  772   1641072 85336 SyS_epoll_ 0000000000 S com.nuomi:remote

5.确定测试包的名字和uid

adb shell dumpsys batterystats "com.nuomi" |find "u0a445"

6.然后执行业务场景,结束之后杀进程

7.杀完进程后,把耗电量信息传到电脑该目录下

adb bugreport>test.txt

8.等待传送结束,手机会震动以下,表示数据传输到电脑完毕

9.打开记录的txt文件,查找耗电量信息,如下图,1.98mah(毫安时)就是该业务场景的耗电量

APP——功耗测试(耗电测试)——adb命令复杂获取分析相关推荐

  1. APP——功耗测试(耗电测试)——adb命令简单获取分析

    =========================================================================================== C:\Users ...

  2. Android终端测试-常用的ADB命令

    作为一个终端测试来说,adb命令绝对是必备且常用的工具,不管是使用adb工具来抓取设备日志还是操作设备,都是比较方便的. 下面命令是在某信工作几年中经常用的的adb命令,主要用来操作TV端(Andro ...

  3. adb 查看屏幕大小_Android应用开发之adb命令如何获取android手机屏幕分辨率

    本文将带你了解Android应用开发之adb命令如何获取android手机屏幕分辨率,希望本文对大家学Android有所帮助 #### 1.   通用方法: adb shell dumpsys win ...

  4. APP测试常用的adb命令以及Monkey测试汇总篇

    1.显示系统中全部设备: adb devices 这个命令是查看当前连接的设备, 连接到计算机的android设备或者模拟器将会列出显示 adb devices 2.开启或关闭ADB服务 开启服务: ...

  5. 安卓测试基础入门——ADB命令

    在安卓测试过程中,QA经常需要进行装包.卸载以及重启等安卓设备的操作,熟练使用ADB命令,可以提高测试效率. 下面将对常用的ADB命令进行整理,后续不定期补充更新. * 查看设备 adb device ...

  6. 移动端测试必备技能: adb命令和抓包

    移动端测试 是指对移动应用进行的测试,即实体的特性满足需求的程度,进行测试前需要搭建测试环境. 1 移动端自动化环境搭建 1.1 java安装 java JDK 安装jdk-8u181-windows ...

  7. adb 命令行获取android数据库文件并在可视化工具下显示

    如果你在做需求的时候无从下,就应该学会分析竞品数据,今天来分析Sqlite数据库,产品自带的数据库下包含很多有用信息,比如字段,你可以根据竞品数据字段去大致设计自己产品的数据库,让自己产品的功能需求更 ...

  8. Android之用adb命令快速获取手机IP方法总结

    方法1 adb shell netcfg 方法2 adb shell netstat 找到local address 方法3 手机root 安装busyboxadb shell ifconfig

  9. Android测试中常用的adb命令、monkey命令

    Android调试桥,一种多功能命令行工具,与设备进行通信 查看adb版本:adb version 关闭和启动adb服务:adb kill-server // adb start-server 安装a ...

最新文章

  1. creo 3.0计算机配置,Creo 3.0 Parametric 配置选项文件使用说明
  2. 十二. 一步步破解JEB 2.0demo版二
  3. mysql的错误代码1064_mysql错误代码之1064的解决方案
  4. Pytorch 加载部分预训练模型并冻结某些层
  5. MCE公司:新型 RORγt 小分子反向激动剂的发现
  6. SEO实战密码(第3版) 60天网站流量提高20倍-3
  7. sap abap开发从入门到精通_云端的ABAP Restful服务开发
  8. window10安装vnc无法使用,window10安装vnc无法使用的原因和解决办法
  9. Laravel 存在SQL注入漏洞
  10. 举个栗子!Tableau 技巧(158):如何实现双域的服务器单点登录
  11. 高一下学期计算机考试知识点,高一第一学期计算机期末考试-基础模块(含答案)...
  12. [开发技巧]·TopN指标计算方法
  13. Go基础(幕客网视频学习笔记)
  14. WSL 2 installation is incomplete.【BUG解决】【Docker之云原生基石】
  15. python学习第二天
  16. 互联网时代的IP技术
  17. 从0开始搭建SQL Server AlwaysOn 第三篇(配置AlwaysOn)
  18. AI芯片市场需要一把火还是一桶冰?
  19. 【FCL入门教程1】实现简单的碰撞检测
  20. python下vtk及mayavi的安装

热门文章

  1. 软考考前必看之热门问题详解
  2. 施一公首部作品:《自我突围:向理想前行》
  3. java 实现非极大值抑制
  4. 通俗易懂的斯特林数介绍
  5. html标签:表格、列表、图片、文字、表单、以及h5新增特性
  6. 基于localstorage实现增删改查功能
  7. 实习周记(第三周):忙碌
  8. Sun开源拳头产品迎不同未来
  9. 关于ExecuteNonQuery()执行成功却返回-1的问题
  10. 单个数码管动态显示(STM32F103C8T6)