耗电量统计:可构建低电耗应用-Battery Historian

BatteryHistorian是一款用于Android设备电池分析的工具,支持Android 5.0及以上版本。它可以帮助开发者了解应用对电池的影响,通过可视化时间线展示系统及应用级事件。本文详细介绍BatteryHistorian的安装步骤与使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

官方解说

新的作业调度 API 支持您将系统作业推迟到后期或特定情况(例如,设备在充电或已连接到 Wi-Fi),从而最大延长电池寿命。

新的 dumpsys batterystats 命令会生成耗电量统计信息,方便您了解整个系统的用电情况以及应用对设备电池的影响。您可以查看电源事件的历史记录、每个 UID 和系统组件的大致用电量,等等。

陈科肇
Battery Historian 是一个新工具,可以将 dumpsys batterystats 的统计信息转成直观的信息,方便就电池进行调试。该工具位于 https://github.com/google/battery-historian

介绍

Battery Historian 是检查运行Android 5.0棒棒堂(API级别21)和更高版本的Andr​​oid设备上的电池相关的信息和事件,而该设备是电池的工具。它允许应用程序开发人员能够可视化时间轴上的系统和应用程序级事件与平移和缩放功能,很容易看到各种汇总统计自其最后一次完全充电,并选择一个应用程序,并检查指标,具体到选择的应用程序影响的电池。它还允许两个bug报告的A / B对比,突出重点与电池相关指标的差异。

使用步骤

1.安装Go Programming Language[go编程语言]

按照提供的说明http://golang.org/doc/install下载和安装围棋的编译器,工具和库。

根据你的操作系统下载不同的安装包
这个不多说,看官方教程操作

Getting Started

=============
Install the Go tools 安装
Test your installation 测试安装是否成功
Uninstalling Go 卸载Go
Getting help 配置帮助

根据在指导创建工作区目录 http://golang.org/doc/code.html#Organization
配置环境变量

GOROOT=E:\0Develop\Android\Battery Historian\Go\
GOPATH=%GOROOT%\work

测试是否安装成功
在你的%GOPATH%下创建文件夹及.go文件:

%GOPATH%/
                        src/
                        hello/
                        hello.go

hello.go文件内容:

package main

import "fmt"

func main() {
    fmt.Printf("hello, world\n")
}

执行命令:

C:\> go install hello

执行完命令后,会在%GOPATH%目录下生成以下文件

%GOPATH%/
                        bin/
                        hello.exe

再执行命令:

C:\> %GOPATH%\bin\hello

即可输出结果!
陈科肇


陈科肇


陈科肇

2.安装Git

Git https://git-scm.com/downloads
配置环境变量

path = %path%;E:\0Develop\Git\bin

3.安装Python 2.7版

确保Python 2.7版(而不是Python 3!)安装。见https://python.org/downloads 如果不是,并确保python被添加到您的$PATH环境变量。
环境变量

path = %path%;E:\0Develop\Python27\;E:\0Develop\Python27\Scripts

4.安装java环境

安装Java http://www.oracle.com/technetwork/java/javase/downloads/index.html

5.下载battery-historian代码和它的相关性

go get -d -u github.com/google/battery-historian/...

下载内容在你的Go创建的工作区目录

6.运行battery-historian

cd %GOPATH%/src/github.com/google/battery-historian

# Compile Javascript files using the Closure compiler
go run setup.go

# Run Historian on your machine (make sure $PATH contains $GOBIN)
#go run cmd/battery-historian/battery-historian.go [--port <default:9999>]
go run cmd/battery-historian/battery-historian.go

注:你必须始终从 $GOPATH/src/github.com/google/battery-historian目录里面跑battery historian

cd $GOPATH/src/github.com/google/battery-historian
#go run cmd/battery-historian/battery-historian.go [--port <default:9999>]
go run cmd/battery-historian/battery-historian.go

执行完成!
陈科肇

7.如何采取一个错误报告

为了从你的Android设备中的bug报告,你将需要下启用USB调试Settings > System > Developer Options。在Android 4.2以上版本,开发者选择屏幕默认是隐藏的。您可以通过以下的说明启用此这里。

要获得从开发设备中的错误报告:

adb bugreport > bugreport.txt
#指定文件位置 adb bugreport > C:\...\bugreport.txt,不指定,在当前执行命令的文件目录
#可以添加你的adb到环境变量中,例:path=%path%;I:\sdk\platform-tools

8.开始分析!

您现在的所有设置。运行historian和访问的http://本地主机:9999和上传bugreport.txt文件,开始分析。
注:最好 用IE浏览器打开
给个效果看看
陈科肇

时间线:

陈科肇


陈科肇

系统统计:

陈科肇

应用统计:

重要概念

Wakelocks:安卓耗电的元凶-Wakelock【唤醒锁】

第三方安卓App调用到Wakelock,一旦调用了Wakelock,无论屏幕开关与否,CPU都会一直保持在运行状态,永不休眠(Deep Sleep)。
这些第三方安卓App让CPU没法进入休眠状态,安卓待机时电量依然刷刷地走。如何阻止App调用Wakelock就成为了安卓省电的关键。
Total number of wakeup alarms[唤醒报警总数]
陈科肇

重置汇总电池统计和历史:

adb shell dumpsys batterystats --reset

Wakelock analysis[唤醒锁分析]

默认情况下,Android不记录时间戳用于特定应用的用户空间wakelock转换即使汇总统计是建立在经营的基础上。如果你想让Battery Historian在时间线上显示wakelock关于每一应用的详细信息,你应该启动实验之前使用以下命令:

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

注意,启用full wakelock reporting 在几小时内报告电池的历史日志溢出。使用此选项可用于短的测试运行(3-4小时)。

Kernel trace analysis[内核跟踪分析]

生成一个跟踪文件记录内核wakeup源和内核wakelock活动:
首先,将设备连接到桌面/笔记本电脑,并启用内核跟踪日志记录:

$ adb root
$ adb shell
# Set the events to trace.
$ echo "power:wakeup_source_activate" >> /d/tracing/set_event
$ echo "power:wakeup_source_deactivate" >> /d/tracing/set_event

# The default trace size for most devices is 1MB, which is relatively low and might cause the logs to overflow.
# 8MB to 10MB should be a decent size for 5-6 hours of logging.

$ echo 8192 > /d/tracing/buffer_size_kb

$ echo 1 > /d/tracing/tracing_on
>与>>的区别
> 是定向输出到文件,如果文件不存在,就创建文件;如果文件存在,就将其清空;一般我们备份清理日志文件的时候,就是这种方法:先备份日志,再用`>`,将日志文件清空(文件大小变成0字节); >>是将输出内容追加到目标文件中。如果文件不存在,就创建文件;如果文件存在,则将新的内容追加到那个文件的末尾,该文件中的原有内容不受影响。

然后,使用该设备用于测试用例。
最后,提取日志:

$ echo 0 > /d/tracing/tracing_on
$ adb pull /d/tracing/trace <some path>

# Take a bug report at this time.
$ adb bugreport > bugreport.txt

注意:

历史学家的情节和(由于开机时间秒)涉及一会儿的事件实时(PST或UTC),而内核跟踪文件记录事件。为了把这些事件有一个脚本接近jiffies的UTC时间。该脚本读取记录在dmesg当系统挂起并恢复UTC时间。脚本的范围仅限于本在dmesg时间戳的量。由于该脚本使用dmesg的日志,当系统暂停,有不同的脚本,每个设备,与作为特定设备的dmesg的登录它试图找到的唯一区别。这些脚本已经被集成到电池历史学家工具本身。

Powermonitor analysis[电力监测分析]

Powermonitor文件应该有每行的格式如下:

<timestamp in epoch seconds> <amps>

从powermonitor文件中的条目将在时间轴情节的顶部覆盖。

为了确保powermonitor和bug报告时限都稍微对齐,请在运行任何powermonitor日志记录之前重置batterystats:

adb shell dumpsys batterystats --reset

并采取bug报告停车powermonitor日志后不久。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值