1. 电量消耗通常包括以下几个方面,它们在日常使用中会对设备的电池寿命产生显著影响:
屏幕亮度和使用时间
- 高亮度屏幕:屏幕亮度是手机电量消耗的主要因素之一。高亮度设置会显著增加电量消耗。
- 屏幕使用时间:长时间使用屏幕(例如浏览网页、观看视频、玩游戏等)会迅速耗尽电量。
无线连接
- Wi-Fi:开启 Wi-Fi 并连接到网络时,即使不在使用,Wi-Fi 模块也会消耗电量来保持连接和搜索信号。
- 移动数据:使用移动数据(特别是 4G/5G)通常比 Wi-Fi 消耗更多的电量,因为移动网络的信号处理和传输功耗较高。
- 蓝牙:开启蓝牙并连接设备时,如蓝牙耳机或智能手表,蓝牙模块会持续消耗电量。
- GPS:开启 GPS 并使用位置服务时,GPS 模块和相关应用程序会持续消耗大量电量。
应用程序
- 后台运行的应用:一些应用程序即使在后台运行,也会消耗大量电量。例如社交媒体、消息推送和同步服务等。
- 高性能应用:游戏、视频编辑和其他需要高计算资源的应用程序会导致处理器和 GPU 高负荷运转,从而迅速耗电。
系统和硬件
- 处理器和 GPU:高性能处理器和 GPU 在运行复杂任务(如游戏、高清视频播放等)时会消耗大量电量。
- 传感器:陀螺仪、加速度计、磁力计等传感器在使用时也会消耗电量,例如在导航或健身应用中。
- 振动和触觉反馈:振动电机的使用(如来电和通知振动)会增加电量消耗。
网络和通信
- 信号强度:信号弱时,设备需要更大功率来维持通信连接,从而增加电量消耗。
- 频繁的数据传输:频繁的数据传输(如上传和下载大文件、流媒体播放等)会显著增加电量消耗。
系统更新和同步
- 自动同步:电子邮件、日历、联系人等数据的自动同步会持续消耗电量。
- 系统更新:系统更新和应用程序更新在下载和安装过程中会消耗电量。
2. power_profile.xml是什么有什么作用,怎么导出?
Android 系统中的一个配置文件,用于定义设备中各种硬件组件在不同工作状态下的功耗信息。这个文件包含了一系列关于电量消耗的参数,这些参数由设备制造商提供,用于准确地估算各个组件在使用过程中的电量消耗。
power_profile.xml 的作用
- 电量统计和估算:
- Android 系统使用
power_profile.xml
中定义的参数来估算设备中各个应用和硬件组件的电量消耗。系统会根据这些参数和使用时间来计算电量消耗,以便在设置中的电池使用详情页面中展示。
- 优化电量使用:
- 通过准确的电量消耗数据,系统可以更有效地进行电量管理和优化,帮助用户识别和关闭高耗电的应用程序或功能。
- 电量分析工具:
- 开发者和系统管理员可以使用这些数据进行电量分析,优化应用程序的性能和电量使用情况。
导出
power_profile.xml
文件通常需要访问 Android 设备的/system/framework/framework-res.apk
包,然后从中提取该文件。以下是详细步骤:
导出方法一:使用 ADB 和 APKTool 导出 power_profile.xml
1. 安装必要工具
- ADB(Android Debug Bridge)
- APKTool
2. 从设备中提取 framework-res.apk
- 确保设备已连接并启用了 USB 调试。
- 使用 ADB 命令将
framework-res.apk
文件从设备中复制到本地计算机:
adb pull /system/framework/framework-res.apk
3. 使用 APKTool 解压 framework-res.apk
- 在终端或命令提示符中导航到
framework-res.apk
所在目录。 - 使用 APKTool 解压
framework-res.apk
:
apktool d framework-res.apk
- 解压后的内容将保存在
framework-res
目录中。
4. 找到 power_profile.xml
- 导航到解压后的目录:
cd framework-res/res/xml/
- 在该目录下,你可以找到
power_profile.xml
文件。
导出方法二:使用文件管理器(需要 root 权限)
如果设备已 root,可以直接使用文件管理器应用访问和导出 power_profile.xml
文件。
- 在设备上安装一个支持 root 权限的文件管理器应用,如 ES 文件浏览器。
- 打开文件管理器,授予 root 权限。
- 导航到
/system/framework/
目录。 - 找到
framework-res.apk
文件并将其复制到设备的外部存储或直接导出到计算机。 - 在计算机上使用 APKTool 解压
framework-res.apk
,然后找到power_profile.xml
文件。
注意事项
- 设备可能需要解锁 bootloader 和 root 权限,以便访问和导出
/system/framework/
目录中的文件。 - 修改系统文件和重打包 APK 可能会影响系统稳定性,进行这些操作时请务必小心,并确保备份原始文件。
通过上述步骤,你可以成功导出并查看 power_profile.xml
文件,进而了解设备的功耗配置。
3. 导出电量统计数据
- 重置电池统计信息(可选):
- 如果你想从零开始记录电池使用情况,可以先重置电池统计信息:
adb shell dumpsys batterystats --reset
- 收集电池使用数据: 让设备运行一段时间以收集电池使用数据。使用一段时间后,可以导出数据。
- 导出电池统计数据:
- 打开终端(macOS 或 Linux)或命令提示符(Windows)。
- 导航到你下载并解压 Android SDK Platform Tools 的目录。
- 输入以下命令以获取电池统计数据并保存到本地文件:
adb shell dumpsys batterystats > batterystats.txt
这会在当前目录下生成一个 batterystats.txt
文件,包含设备的详细电池使用情况。
- 导出电池历史记录到 CSV 文件(可选):
- 你也可以将电池历史记录导出到 CSV 文件,以便更方便地进行分析:
adb shell dumpsys batterystats --enable full-history
adb bugreport > bugreport.zip
bugreport.zip
文件包含设备的全面报告,包括电池历史记录。解压这个文件,你可以找到电池历史记录的 CSV 文件。
示例步骤
假设你已经安装了 ADB 并且设备已经连接和配置好 USB 调试:
- 在终端/命令提示符中导航到 ADB 工具目录:
cd path/to/platform-tools
- 导出电池统计数据:
adb shell dumpsys batterystats > batterystats.txt
- 查看导出的文件:
- 导出的
batterystats.txt
文件包含了设备的电池使用详细信息,你可以用文本编辑器打开查看。
- 导出 CSV 文件(可选):
adb shell dumpsys batterystats --enable full-history
adb bugreport > bugreport.zip
解压 bugreport.zip
文件,可以找到包含电池历史记录的 CSV 文件。
4. 获取指定应用的电量消耗数据
- 获取应用的包名:
- 确认你要获取电量消耗数据的应用包名。假设包名是
com.example.app
。
- 导出电量消耗数据:
- 打开终端或命令提示符。
- 输入以下命令以获取电池统计信息并保存到文件:
adb shell dumpsys batterystats > batterystats.txt
- 过滤指定应用的电量消耗数据:
- 通过以下命令过滤出指定应用的电量消耗信息:
grep -A 20 'com.example.app' batterystats.txt > app_batterystats.txt
- 这个命令会在
batterystats.txt
中搜索包含应用包名的行,并输出之后的20行内容到app_batterystats.txt
文件中。这可以帮助你捕捉到应用相关的电量消耗信息。根据输出内容的格式,你可能需要调整-A 20
这个参数来获取更多或更少的行。
示例步骤
假设你的应用包名是 com.example.app
:
- 导出电池统计数据到文件:
adb shell dumpsys batterystats > batterystats.txt
- 过滤出指定应用的电量消耗数据:
grep -A 20 'com.example.app' batterystats.txt > app_batterystats.txt
查看过滤后的数据
打开生成的 app_batterystats.txt
文件,可以看到包含指定应用电量消耗的详细信息。
注意事项
- 调整过滤参数: 根据输出的具体格式,你可能需要调整
grep
命令中的参数以获取完整的电量消耗数据。 - 数据格式:
batterystats.txt
文件中数据的具体格式可能因 Android 版本和设备不同而有所变化,确保过滤后的数据是你需要的。
5. 使用Battery Historiand解析bugreport.zip
搭建过程参考其他网络文章例如
Battery Historian 是 Google 提供的一种开源工具,用于可视化和分析 Android 设备的电池使用情况。它解析和展示从 Android 设备获取的电池使用历史数据,帮助开发者和用户识别影响电池寿命的因素,如应用程序的行为、系统事件、硬件使用情况等。
主要功能
- 电池消耗图表:
- 提供详细的电池使用情况图表,展示设备在不同时间段的电量变化。
- 可视化 wakelocks(应用程序或系统组件保持设备唤醒的时间)、应用程序使用情况、CPU 活动、网络连接等信息。
- 事件时间轴:展示设备上发生的各种系统事件,如屏幕状态变化、充电状态变化、应用程序启动和停止等。
- 应用程序电量使用:解析和展示各个应用程序的电量使用情况,帮助识别耗电大户。
- 硬件使用情况:提供各个硬件组件(如 Wi-Fi、蓝牙、GPS、传感器等)的使用情况和相应的电量消耗。
Battery Historian 的工作原理
Battery Historian 通过解析 Android 设备生成的 bugreport 文件获取电池使用历史数据。这些文件包含了设备在特定时间段内的详细系统日志和状态信息。
搭建完展示的页面:
- 点击Browse上传对应的文件bugreport.zip
- 上传成功后,生成的分析报告页面
- 鼠标放在黑线上会展示电量的使用情况
- 英文大家看着懵逼 给大家安排个中文的吧
首先你要熟悉你的业务,知道在某一些时间cpu不存在占用或者某些后台任务不应该在特定的时间存在,然后根据分析得到对应的逻辑存在异常的情况,比如cpu占比高或者页面在不需要刷新的时候又进行了刷新等,从这里看不到细致的东西 需要跟业务结合判断发现问题,然后再根据其他手段比如:Android studio自带的Android Profiler查看内存占用以及cpu的占用情况、用开发者模式的显示视图更新定位是否在页面存在不合理的刷新。
6. Android studio自带的Android Profiler查看内存占用以及cpu的占用情况
- 在CPU的面板点击record/stop记录一波数据
最后的结果你可以看到cpu的占用降低,对应的电量也会降低。
7. 用开发者模式的显示视图更新定位是否在页面存在不合理的刷新
因为涉及到app的隐私问题不能放出图这块,直接参考tech.meituan.com/2018/03/11/… 美团的优化吧,核心思想都是一样的,就是根据不同页面的耗电量不同,定位出对应的问题所有,有可能是部分布局不可见的时候页面还在刷新,也可能是一个小布局造成大布局的刷新等等..