使用 Batterystats 和 Battery Historian 分析电池使用情况

本文档展示了 Batterystats 工具和 Battery Historian 脚本的基本设置步骤和工作流程。要了解如何使用 Battery Historian 检查电池消耗模式,请参阅 使用 Battery Historian 分析功耗

Batterystats 是 Android 框架中包含的一个工具,用于收集设备上的电池数据。您可以使用 adb 将收集到的电池数据转储到您的开发机器上,并创建一个报告,您可以使用 Battery Historian 分析该报告。Battery Historian 将 Batterystats 的报告转换为可在浏览器中查看的 HTML 可视化效果。

Batterystats 和 Battery Historian 可用于以下用途:

  • 向您展示进程从电池中汲取电流的位置和方式。
  • 确定应用中可以推迟或删除的任务,以延长电池续航时间。

安装 Battery Historian

您可以使用 Docker 安装 Battery Historian。有关替代安装方法(包括从源代码构建),请参阅项目 GitHub 页面上的 自述文件。要使用 Docker 安装,请执行以下操作:

  1. 按照 Docker 网站 上的说明安装 Docker。任何 订阅 类型都可以,包括免费的个人订阅。

  2. 要确认 Docker 是否已正确安装,请打开命令行并输入以下命令:

    docker run hello-world
    

    如果 Docker 已正确安装,它将显示类似以下内容的输出:

    Unable to find image 'hello-world:latest' locally
    latest: Pulling from library/hello-world
    78445dd45222: Pull complete
    Digest:
    sha256:c5515758d4c5e1e838e9cd307f6c6a0d620b5e07e6f927b07d05f6d12a1ac8d7
    Status: Downloaded newer image for hello-world:latest
    
    Hello from Docker!
    This message shows that your installation appears to be working correctly.
    
    To generate this message, Docker took the following steps:
    1. The Docker client contacted the Docker daemon.
    2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
    4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal
    
  3. 在运行 Battery Historian 镜像之前,启动 Docker Desktop 应用(这是 Docker 的 GUI 前端)。运行此操作将初始化 Docker 工具。除非您至少执行此操作一次,否则 Battery Historian 不会运行。

  4. 首次运行 Battery Historian 时,请使用命令行运行。Docker Desktop 应用程序不允许您指定 Web 服务器运行的端口。您只能通过命令行进行此操作。但是,在您成功地从命令行运行容器后,Docker Desktop 中会创建一个条目,然后您可以使用相同的监听端口从 Docker Desktop 启动它。

  5. 使用以下命令运行 Battery Historian 镜像:

    docker run -p port_number:9999 gcr.io/android-battery-historian/stable:3.1 --port 9999
    

    Battery Historian 使用您选择的端口,如使用 port_number 指定。

  6. 在您的浏览器中导航到 Battery Historian 以确认它正在运行。地址因您的操作系统而异。

    对于 Linux 和 Mac

    Battery Historian 可在 https://127.0.0.1:port_number 访问。

    对于 Windows

    启动 Docker 后,它会告诉您它正在使用的机器的 IP 地址。例如,如果 IP 地址为 123.456.78.90,则 Battery Historian 可在 http://123.456.78.90:port_number 访问。

    然后它会显示 Battery Historian 的起始页面,您可以在其中上传和查看电池统计信息。

    The start page for Battery Historian
    图 1. Battery Historian 的起始页面。

使用 Batterystats 收集数据

要使用 Batterystats 从您的设备收集数据并在 Battery Historian 中打开它,请执行以下操作:

  1. 将您的移动设备连接到您的计算机。

  2. 在终端窗口中,通过运行以下命令关闭正在运行的 adb 服务器:

    adb kill-server
    
  3. 重新启动 adb 并通过运行以下命令检查已连接的设备。

    adb devices
    

    它会列出您的设备,类似于以下示例输出。

    The output of adb devices
    图 2. adb devices 的输出,显示一个已连接的设备。

    如果它没有列出任何设备,请确保您的手机已连接并且已启用 USB 调试,然后停止并重新启动 adb

  4. 通过运行以下命令重置电池数据收集:

    adb shell dumpsys batterystats --reset
    

    设备始终在后台收集 Batterystats 和其他调试信息。重置会清除之前的电池收集数据。如果您不重置,输出可能会非常大。

  5. 将您的设备从计算机断开连接,以便您只从设备的电池中汲取电流。

  6. 使用您的应用程序并执行您想要收集数据的操作。例如,断开 Wi-Fi 连接并将数据发送到云端。

  7. 重新连接您的手机。

  8. 确保您的手机已识别并运行以下命令:

    adb devices
    
  9. 通过运行以下命令转储所有电池数据。这可能需要一些时间。

    adb shell dumpsys batterystats > [path/]batterystats.txt
    

    batterystats.txt 文件将创建在您使用可选路径参数指定的目录中。如果您没有指定路径,则该文件将创建在您的主目录中。

  10. 从原始数据创建报告。

    对于运行 Android 7.0 及更高版本的设备

    adb bugreport [path/]bugreport.zip

    对于运行 Android 6.0 及更低版本的设备

    adb bugreport [path/]bugreport.txt

    bugreport 可能需要几分钟才能完成。在它完成之前,请不要断开您的设备连接或取消该进程。

    batterystats.txt 一样,这些文件将创建在您使用可选 path 参数指定的目录中。如果您没有指定路径,它们将创建在您的主目录中。

    如果它尚未运行,请使用以下命令运行 Battery Historian:

    docker run -p port_number:9999 gcr.io/android-battery-historian/stable:3.1 --port 9999
    
  11. 要在 Battery Historian 中查看您的数据,请在浏览器中打开 Battery Historian。对于 Mac 和 Linux,Battery Historian 运行在 https://127.0.0.1:port_number。对于 Windows,Battery Historian 运行在 http://your_IP_address:port_number

  12. 单击浏览,然后选择您创建的 bugreport 文件。

  13. 单击提交。Battery Historian 将打开一个根据您的 Batterystats 数据创建的图表。

使用 Battery Historian 图表查看数据

Battery Historian 图表随时间推移绘制与电源相关的事件。

当系统组件处于活动状态并因此从电池中汲取电流时,每一行都会显示一个彩色的条形段。图表不会显示组件使用了多少电池——只显示应用程序是否处于活动状态。图表按类别组织,随时间推移显示每个类别的条形图,如图表横坐标所示。

Example of a Battery Historian chart
图 3. Battery Historian 图表的示例。
  1. 从下拉列表中添加其他指标。
  2. 将指针悬停在指标名称上,可以查看有关每个指标的更多信息,包括图表中使用的颜色的键。
  3. 将指针悬停在一个条形图上,可以查看有关该指标和时间轴上特定点的电池统计信息的更多详细信息。

其他 Batterystats 输出

您可以在 Battery Historian 图表后的统计信息部分查看 batterystats.txt 文件中的其他信息。

The stats section of Battery Historian
图 4. Battery Historian 的统计信息部分。

1 系统统计信息选项卡包含系统范围的统计信息,例如蜂窝信号级别和屏幕亮度。这些信息提供了设备发生情况的总体情况。这对于确保没有外部事件影响您的测试特别有用。

2 应用程序统计信息选项卡包含有关特定应用程序的信息。使用应用程序选择窗格中的 3 按应用程序排序下拉列表对应用程序列表进行排序。您可以使用 4 应用程序下拉列表选择特定应用程序以查看其统计信息。