乐趣区

关于android:Android耗电分析之Battery-Historian工具使用

Battery-Historian 是谷歌推出的一款专门剖析 Bugreport 的工具,是谷歌在 2015 年 I / O 大会上推出的一款检测运行在 android5.0(Lollipop) 及当前版本的设施上电池的相干信息和事件的工具,是一款对于剖析手机状态,历史运行状况很好的可视化剖析工具。

当设施在应用电池的时候,它能够使开发者们看到零碎级和利用级事件图表,在图表时间轴上能够缩放和平移,可能直观的看到自上一次充斥电到当初设施电池的统计汇总信息,它能够选中一个应用程序来查看该利用影响电池电量的一些参数,并且能够比照两个 bugreport 文件信息剖析,并对其电池要害区别点做高亮显示。

不过,须要留神的是,battery historian 在应用时候不能在充电,同时确保设施运行在 Android 5.0 及以上版本。而对于 Android8.0 及其以上版本,咱们更举荐应用 Android Studio 自带的 Energy Profiler 工具。

一、Battery Historian 环境

battery historian 剖析须要装置 Docker,其装置和运行办法官网有具体的阐明:Battery Historian 装置。可能在本地装置 Battery Historian 环境还比拟繁琐,此次举荐一个他人搭建好的地址:https://bathist.ef.lc/。

二、生成耗电报告

耗电统计是零碎组件,随同零碎运行的整个过程,也就是说只有零碎在运行它就会始终统计耗电数据。这个统计是基于软件层面实现的,不同的硬件模块配置了不同的参数,而后应用算法进行估算,power_profile 文件的参数值 OEM 厂商必须测量并提供前理论值,所以不同的厂商是不一样的。

另外,获取统计报告的时候须要将重置统计,并断开 usb 连贯,并且不能处于充电状态,否则会大大影响统计的后果。上面是应用步骤:

  1. 连贯手机,关上开发者模式,而后连贯 adb。
  2. 重置 batterystats 数据, 手机始终在后盾收集 batterystats 和其余调试信息,重置的命令:
adb shell dumpsys batterystats –reset
  1. 继续应用咱们须要测试的利用,而后导出原始 bugreport 数据,导出的命令:
//Android 7.0 及以上版本
adb bugreport bugreport.zip


//Android 5.0 及以上版本
adb bugreport > bugreport.txt

期待报告生成,会生成一个 bugreport.zip 或 bugreport.txt 文件,如下图。

三、Battery Historian 指标剖析

关上 https://bathist.ef.lc/ 网站,抉择 bugreport.zip 文件并上传。

期待剖析后果,剖析实现之后,零碎会生成如下的图表。

图表按类别进行组织,随着工夫的推移显示每个类别的栏,如图表的 X 轴上所示。不同色彩代表指标的不同状态:比方 Screen 红色代表亮屏,红色代表关屏,具体鼠标放在最左侧的️上就会主动提醒。

默认状况下,统计信息是在运行根底上保护的,Android 也不记录特定于应用程序的用户空间 wakelock 转换的工夫戳。如果您心愿 Historian 在工夫线上显示对于每个独自唤醒锁的详细信息,则应在开始试验之前应用以下命令启用残缺唤醒锁报告。

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

而后,咱们来看一下具体的指标,剖析前咱们须要抉择某个具体的利用:

页面的右下角有几个选项卡,能够用来查看一些具体的性能数据:

  • System Stats:蕴含零碎范畴的统计信息, 如单元信号级别和屏幕亮度。这些信息提供了设施产生状况的整体状况。这对确保没有内部事件影响特地有用。
  • App Stats:蕴含无关特定应用程序的信息。应用左侧的应用程序抉择窗格中排序应用程序下拉列表对应用程序列表进行排序。能够抉择一个特定的应用程序来查看应用程序下拉列表的统计信息。

同时,在抉择应用程序后,咱们还能够抉择某个具体的场景进行剖析,如下图。

四、案例剖析

应用 battery historian 进行电量剖析时,通常有如下一些套路:

  1. 通过 system stats 中 screenon/off rate 均匀亮灭屏耗电熟读能够初步确认亮屏或者灭屏耗电是否有异样。
  2. 通过选取电量值察看每格电量的耗费速度,确认耗电异样时间段和以后前台利用,网络状态,后盾 job 等信息。
  3. 综合以后亮度,网络状态,后盾 job,前台利用估算是否合乎预期,确认是否以后配置环境问题,还是利用耗电异样。

上面看几个具体的案例场景:

1,充电慢问题:查看充电电流值,确认充电电流是否合乎预期。查看充电过程是否有异样 job 在长时间执行,如果有异样 job 耗电也会升高充电电流。查看对应电池温度是否有低温景象,电池温度过高会限度充电电流。

2,发热问题:通过 batterystats 查看以后发热状况,找到温度最高区间,综合以后网络,亮度,利用确认耗电状况是否合乎预期。如耗电电流不大,然而温度确继续减少,大概率环境无奈散热导致,比方太阳光直射,物品笼罩无奈散热。

3,亮屏耗电问题:当呈现亮屏耗电时,先查看网络状态,亮度状态,是否高耗电利用。不同网络耗电排行 5G>4G>wifi,高亮下耗电会急剧减少,游戏相机场景会耗电大。
比方,上面的场景是用户反馈白天耗电快场景(4G 下,高亮,加上后盾 GPS 长时间定位)。

4,息频耗电问题:息屏场景,局部 app 会通过音频持锁来给本人保活。通过查看 audio 和 wakelock 状态能够确认此类问题。app 频繁网络包唤醒零碎(利用唤醒频次低于 1min),同样也会引起耗电快。
比方,上面的场景用户反馈息屏耗电快场景:从 batteryhistorian 能够看到 xfPlay,始终持有音频锁给本人保活,导致系统无奈休眠从而息屏耗电。

5,息屏异样耗电问题:所有信息都合乎预期,然而还是耗电快,此种状况可能是有异样器件漏电问题。
比方,上面的场景息屏耗电场景,唤醒周期超过 2min,休眠比良好,然而耗电仍旧很大。有可能是器件漏电,须要业余功耗工程师进一步剖析。

  1. 电量追赶问题:当发现耗电电流超过理论值,并且无异样发热,大概率是呈现了电量追赶问题。当计算出来的实在电量和理论电量有差别时,理论电量就会疾速降落追赶至实在电量,体现就是 30s 或者 60s 一格电的速度去追赶。
    比方,息屏耗电场景均匀耗电电流 5466ma, 实践手机不会呈现这么大电流(。此时温度失常,大概率是呈现了虚电,电量追赶问题,须要从 kernel 日志进一步剖析确认。

Battery Historian 图形化工具,能够十分直观查看历史耗电信息,追溯到耗电场景。对于个别用户,Battery Historian 剖析简略耗电问题曾经足够。不过,对于更深的耗电问题,则须要更多的辅助日志或者 dump 由更业余工程师进一步剖析。

退出移动版