使用 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 页面上的 README。要使用 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 可通过 http://localhost: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 运行在 http://localhost:port_number。对于 Windows,Battery Historian 运行在 http://your_IP_address:port_number

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

  13. 点击提交。Battery Historian 会打开一个从您的 Batterystats 数据创建的图表。

使用 Battery Historian 图表查看数据

Battery Historian 图表绘制了与电量相关的事件随时间的变化。

当系统组件处于活动状态并从电池消耗电流时,每行都会显示一个彩色条段。图表不显示组件消耗了多少电池电量,只显示应用是否处于活动状态。图表按类别组织,在图表的 x 轴上显示每个类别随时间变化的条形。

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 应用下拉列表选择要查看统计信息的特定应用。