Android 电池使用情况分析

Posted 虫师魁拔

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 电池使用情况分析相关的知识,希望对你有一定的参考价值。

一、抓取系统相关日志

电池相关日志通过 bugreport 或者 dumpsys batterystats 都可以抓取到,bugreport 抓取的东西太多了,一般没必要。按照如下指令抓取

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

执行 reset 后按照测试手法进行,结束后执行如下指令

adb shell dumpsys batterystats > batterystats.txt

 抓到的 batterystats.txt 文件信息比较杂乱,可以使用 battery-historian 工具格式下。

二、日志处理

battery-historian 是 Google 的一个开源工具,包含一些 python 脚本,是基于 Python 2.7 的,注意关注项目的 README.md ,里面对使用环境作了说明。从GitHub 上下载脚本。

 battery-historian/scripts/historian.py

再执行

python historian.py -a batterystats.txt > batterystats.html

注:可能会提示

AttributeError: 'NoneType' object has no attribute 'groupdict'

脚本需要修改下,加下这个异常判断,

def parse_time(s, fmt):
  """Parses a human readable duration string into milliseconds.
  Takes a human readable duration string like '1d2h3m4s5ms' and returns
  the equivalent in milliseconds.
  Args:
    s: Duration string
    fmt: A re object to parse the string
  Returns:
    A number indicating the duration in milliseconds.
  """
  if s == "0": return 0.0

  p = re.compile(fmt)
  match = p.search(s)
  try:
    d = match.groupdict()
  except IndexError:
    return -1.0

  # 匹配不到存在为空的情况
  except AttributeError:
    return -1.0

生成的 html 文件使用网页打开显示电量图片(操作方式见Battery Historian说明),没条件的也可以直接 txt 方式打开大概看看内容,搜索以下文字

Battery Historian analysis

这里开始就是电池相关信息内容。

每一条包含事件内容和持续时间,时间线是从 0 开始。TAG 含义如下 

  •  battery_level:电量变化事件
  • plugged:充电事件
  • screen:亮屏事件
  • top:前台应用
  • job:后台服务
  • running:系统运行
  • wake_lock:系统 wake lock
  • wake_lock_in:具体的wake lock事件

其他还有 wifi wifi_scan wifi_radio wifi_signal_strength phone_signal_strength audio 等,按照字面意思理解即可。

这些就凑成系统整个阶段的工作情况,根据 battery_level 变化加上变化时间段内系统运行情况,判断耗电量是否正常。

三、网页查看

网页查看电量变化图片操作网上说的两种:

1、可以按照 https://github.com/google/battery-historian 官网 README.md 说的操作。

2、使用 https://bathist.ef.lc/ 网页去加载bugreport.zip ,添加Chrome浏览器插件CDN,操作步骤按照 GitHub 上面说明即可。

bugreport.zip 由执行 adb bugreport bug.zip 获取的,7.0之前执行 adb bugreport bug.txt

以上是关于Android 电池使用情况分析的主要内容,如果未能解决你的问题,请参考以下文章

8.4 Android灯光系统_源码分析_电池灯

如何使用 Firebase 分析跟踪 android 片段

Android:每个应用程序的电池使用情况

Android 下的 Websockets 与 GCM:电池使用情况?

Android 电池关机充电

Android 逆向整体加固脱壳 ( DEX 优化流程分析 | DexPrepare.cpp 中 dvmOptimizeDexFile() 方法分析 | /bin/dexopt 源码分析 )(代码片段