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 电池使用情况分析的主要内容,如果未能解决你的问题,请参考以下文章
Android 下的 Websockets 与 GCM:电池使用情况?
Android 逆向整体加固脱壳 ( DEX 优化流程分析 | DexPrepare.cpp 中 dvmOptimizeDexFile() 方法分析 | /bin/dexopt 源码分析 )(代码片段