测试电池使用情况

70

我希望测试我的应用程序对手机/平板电脑电池的影响。

有没有测试工具可以让我这样做呢?

例如,我想测试我的应用程序中哪些模块消耗了最多的电池电量等。


1
+1 这是一个好问题,我认为更多的人应该关注这个问题。我猜测在每个模块上衡量电池性能可能会很困难。我想你只能得到整个系统随时间的平均使用情况。 - Robert
在 BUILD 大会的其中一次主题演讲中,他们展示了运行 Windows 8 的平板电脑功耗的实时图表。该图表以毫秒为单位进行更新,并且具有高精度,但是监控计算机与被拆开的三星平板电脑直接连接了导线。他们说他们使用这种方法来评估操作系统和应用程序的所有方面的功耗。我相信 Android 也有类似的工具,但可能也需要一些硬件调整。 - Allon Guralnek
2
非常相似:https://dev59.com/gW435IYBdhLWcg3w7k6b - Steve Blackwell
6个回答

31

有一个随Android 5.0一起发布的新工具。

你可以运行

adb shell dumpsys batterystats > dump.txt
为了获取设备完整的电池转储信息,您还可以添加一些选项,例如--unplugged(仅输出自上次拔下插头以来的数据)或--charged(仅输出自上次充电以来的数据)。您还可以添加一个包名,仅获取此软件包/应用程序的信息。
adb shell dumpsys batterystats --unplugged your.package.name > dump.txt

使用> dump.txt命令可以将所有内容输出到一个文件中(这可能只在Windows上有效,但您可以将其省略,在控制台中会打印出dump的内容,您可以将其复制并放入文件中)。

这仅适用于Android 5.x及以上版本的设备。如果您的设备版本较低,可以尝试使用

adb shell bugreport > bugreport.txt

但是这个文件会非常非常大。(~8mb+)

创建完这个文件后,您可以使用Google Historian 工具

要使用它,您必须安装Python 2.7.9并运行以下命令。

python /path/to/historian.py dump.txt > battery.html

这将创建一个battery.html文件,您可以在其中以更有用的格式查看数据。

最后一件事:如果您想重置电池转储的统计信息,请调用

adb shell dumpsys batterystats --reset

(仅适用于 Android 5.x)


还适用于Kitkat之前的设备,请参见:https://dev59.com/-YHba4cB1Zd3GeqPMxuX#24785282。也可以尝试脚本:https://github.com/alex-yh99/battery-historian/blob/master/battery_test.py - Yaohui.W
有没有办法在Android应用程序中运行adb命令?在stackoverflow上尝试过,但没有成功。https://stackoverflow.com/questions/49119721/run-adb-command-from-application-using-java - Shohrab

22

实际上,我认为大多数存在电源问题的应用程序也存在“CPU”问题。也就是说,应用程序CPU使用率的配置文件可能很好地近似了您的电池消耗情况。如果您的应用程序正在使用GPU、无线网络、存储等执行昂贵操作,并且那些昂贵操作没有占用太多CPU时间,就存在一些注意事项和例外。

以下是一篇有关“Power Tutor”应用程序的有趣博客文章,它提供了比内置电池应用程序更精确的运行系统测量结果: http://gigaom.com/mobile/android-power-consumption-app/。我没有尝试过。

对于另一个层面的细节,这是一篇论文,分解了哪些手机组件消耗最多的能量(请注意,该论文来自2010年):http://www.usenix.org/event/usenix10/tech/full_papers/Carroll.pdf (只需跳到第5节阅读其结果)。他们说屏幕亮度是最大的罪魁祸首。

如果屏幕亮度是最大的罪魁祸首,请确保将其设置为固定水平,如果要测量您自己的应用程序使用情况。

如果您真的对测量电量消耗感兴趣,则可以遵循他们的方法(这涉及打开手机并物理附加测量设备)。


4
GPS 也会消耗很多电池! - felixd

4
您提出的问题是当前的研究课题。目前正在进行关于跟踪细粒度功耗使用的研究,即跟踪线程或子例程基础上的功率使用情况。 eprof是一种由某些大学毕业生开发的工具。您可以在此处找到有关此主题的一些论文:http://web.ics.purdue.edu/~pathaka/pubs.html。我正在从事同样的工作,如果有任何可供普通用户使用的内容,我一定会通知您。

7
禁止访问那个链接。你能提供一个有效的链接吗? - saltandpepper
这是Pathak的一篇论文http://www.cs.columbia.edu/~nieh/teaching/e6998/papers/eprof_eurosys2012.pdf - 可能是因为链接损坏而无法访问。 - Mick
答案和评论中的链接已经不存在。 - Federico Cristina

1

从Android 2.3.3开始,系统具有本地电池监视器。

设置 -> 关于手机 -> 电池使用


2
谢谢您的回答,hunterp。但我需要更详细的电池使用分析,以便我可以找出如何改善我的应用程序的电池使用情况。 - Arnab Chakraborty

0

我们进行了类似的测试,以了解我的应用程序对Nexus5手机的电池消耗负责程度。

但不幸的是,我们无法从任何工具中获得帮助,而大多数都是基于手动测试。

我们确定了一些应用程序模块,这些模块被怀疑会消耗更多的电池。

  1. 使用GPS的位置感知模块。

  2. 使用网络连接运行长时间后台操作的上传模块。

  3. 视频创建模块也由于后台操作使CPU繁忙等等...

最终,在进行3-4轮测试后,我们在数据中发现了一些趋势,并且我们能够确定导致电池消耗的主要模块。

基本上,如果某些东西让CPU保持繁忙状态更长时间,则电池消耗将更多。因此,我们可以考虑具有后台操作、网络相关操作的模块。

目前我找不到任何工具可以告诉我们特定应用程序的上述测试结果。

希望我的经验对原始问题的需求陈述有所裨益。


请您解释一下寻找消耗电池的模块所执行的步骤。 - Rahulrr2602

0

我认为没有任何真正的工具可以测试电池寿命,因为它无法被精确地测量。如果你拿一台iPhone,你会看到电池电量从40%降至30%,然后停留一段时间,降至20%,再降至15%,上升至25%,回到20%等等。 你可以将手机充电数个小时,以确保其完全充电,然后使用你的应用程序直到手机关闭,并记录所需时间。然后再使用另一个版本进行同样的测试,并对比结果。 基本上,如果你想尽可能减少测试次数,就必须像玩猜数字游戏一样进行测试。 此外,如果变化不容易被察觉,那么它可能并不是很重要。


你提出的方法也不够准确。如果在第二次运行期间,设备本身(操作系统)或其他已安装的应用程序决定更新某些数据(备份联系人、发送使用日志、检查更新等),那么你将浪费电池上的WiFi/3G连接和数据传输吗? - MikeL

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接