测量特定应用程序或手机硬件特定部分的功耗并不那么容易。从公共 Google Developer API 中不可能以简单的方式做到这一点。还有其他一些非常复杂的方法。对于每部 Android 智能手机,谷歌都要求制造商添加一个所谓的电源配置文件 https://source.android.com/devices/tech/power/XML 到设备。他们看起来像这样
<item name="screen.on">0.1</item> <!-- ~200mA -->
<item name="screen.full">0.1</item> <!-- ~300mA -->
<item name="bluetooth.active">0.1</item> <!-- Bluetooth data transfer, ~10mA -->
<item name="bluetooth.on">0.1</item> <!-- Bluetooth on & connectable, but not connected, ~0.1mA -->
<item name="wifi.on">0.1</item> <!-- ~3mA -->
<item name="wifi.active">0.1</item> <!-- WIFI data transfer, ~200mA -->
<item name="wifi.scan">0.1</item>
它们告诉您组件的每个硬件状态消耗多少电流(例如 Wifi 有 3 个状态,CPU 有 10 个状态等)。现在 Android 是基于 Linux 的,这允许您检查每个硬件组件的当前状态。例如文件
/sys/devices/virtual/leds/lcd-backlight/brightness
为您提供 LCD 的当前状态(请注意,对于此no需要 root 访问权限)。对于每个硬件组件都存在这样的路径。如果您现在想要准确测量应用程序消耗的能量,您需要编写一个服务来监视应用程序何时处于活动状态以及当前的硬件状态是什么。有了这些信息,您就可以计算能源消耗。
还有一个开源的应用程序,它被称为强力导师 http://ziyang.eecs.umich.edu/projects/powertutor/(这里是Play 商店链接 https://play.google.com/store/apps/details?id=edu.umich.PowerTutor和她你会发现源代码 https://github.com/msg555/PowerTutor。它的作用正是我刚才解释的。他们还发表了科学paper http://robertdick.org/publications/zhang10oct.pdf他们的方法有多准确(效果很好)。
现在问题来了。几年前,我在测量某些应用程序的功耗时遇到了问题。一位客户希望我们评估他们的确切功耗。最后我们发现分析所依据的功率曲线不够准确。制造商似乎只是在 XML 中放入了一些与设备无关的值。我们有来自 20 个不同品牌的 100 多种不同设备,其中只有少数设备的 XML 中似乎有与设备相关的值。
最后我可以说,不要花太多时间在软件方面测量实际功耗,这是不值得的。使用真正的万用表直接测量硬件。