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 的作用
  1. 电量统计和估算
  • Android 系统使用 power_profile.xml 中定义的参数来估算设备中各个应用和硬件组件的电量消耗。系统会根据这些参数和使用时间来计算电量消耗,以便在设置中的电池使用详情页面中展示。
  1. 优化电量使用
  • 通过准确的电量消耗数据,系统可以更有效地进行电量管理和优化,帮助用户识别和关闭高耗电的应用程序或功能。
  1. 电量分析工具
  • 开发者和系统管理员可以使用这些数据进行电量分析,优化应用程序的性能和电量使用情况。 导出 power_profile.xml 文件通常需要访问 Android 设备的 /system/framework/framework-res.apk 包,然后从中提取该文件。以下是详细步骤:
导出方法一:使用 ADB 和 APKTool 导出 power_profile.xml
1. 安装必要工具
  • ADB(Android Debug Bridge)
  • APKTool
2. 从设备中提取 framework-res.apk
  1. 确保设备已连接并启用了 USB 调试。
  2. 使用 ADB 命令将 framework-res.apk 文件从设备中复制到本地计算机:
adb pull /system/framework/framework-res.apk
  • 1.
3. 使用 APKTool 解压 framework-res.apk
  1. 在终端或命令提示符中导航到 framework-res.apk 所在目录。
  2. 使用 APKTool 解压 framework-res.apk
apktool d framework-res.apk
  • 1.
  1. 解压后的内容将保存在 framework-res 目录中。
4. 找到 power_profile.xml
  1. 导航到解压后的目录:
cd framework-res/res/xml/
  • 1.
  1. 在该目录下,你可以找到 power_profile.xml 文件。
导出方法二:使用文件管理器(需要 root 权限)

如果设备已 root,可以直接使用文件管理器应用访问和导出 power_profile.xml 文件。

  1. 在设备上安装一个支持 root 权限的文件管理器应用,如 ES 文件浏览器。
  2. 打开文件管理器,授予 root 权限。
  3. 导航到 /system/framework/ 目录。
  4. 找到 framework-res.apk 文件并将其复制到设备的外部存储或直接导出到计算机。
  5. 在计算机上使用 APKTool 解压 framework-res.apk,然后找到 power_profile.xml 文件。
注意事项
  • 设备可能需要解锁 bootloader 和 root 权限,以便访问和导出 /system/framework/ 目录中的文件。
  • 修改系统文件和重打包 APK 可能会影响系统稳定性,进行这些操作时请务必小心,并确保备份原始文件。

通过上述步骤,你可以成功导出并查看 power_profile.xml 文件,进而了解设备的功耗配置。

3. 导出电量统计数据

  1. 重置电池统计信息(可选):
  • 如果你想从零开始记录电池使用情况,可以先重置电池统计信息:
adb shell dumpsys batterystats --reset
  • 1.
  1. 收集电池使用数据: 让设备运行一段时间以收集电池使用数据。使用一段时间后,可以导出数据。
  2. 导出电池统计数据:
  • 打开终端(macOS 或 Linux)或命令提示符(Windows)。
  • 导航到你下载并解压 Android SDK Platform Tools 的目录。
  • 输入以下命令以获取电池统计数据并保存到本地文件:
adb shell dumpsys batterystats > batterystats.txt
  • 1.

这会在当前目录下生成一个 batterystats.txt 文件,包含设备的详细电池使用情况。

  1. 导出电池历史记录到 CSV 文件(可选):
  • 你也可以将电池历史记录导出到 CSV 文件,以便更方便地进行分析:
adb shell dumpsys batterystats --enable full-history
adb bugreport > bugreport.zip
  • 1.
  • 2.

bugreport.zip 文件包含设备的全面报告,包括电池历史记录。解压这个文件,你可以找到电池历史记录的 CSV 文件。

示例步骤

假设你已经安装了 ADB 并且设备已经连接和配置好 USB 调试:

  1. 在终端/命令提示符中导航到 ADB 工具目录:
cd path/to/platform-tools
  • 1.
  1. 导出电池统计数据:
adb shell dumpsys batterystats > batterystats.txt
  • 1.
  1. 查看导出的文件:
  • 导出的 batterystats.txt 文件包含了设备的电池使用详细信息,你可以用文本编辑器打开查看。
  1. 导出 CSV 文件(可选):
adb shell dumpsys batterystats --enable full-history
adb bugreport > bugreport.zip
  • 1.
  • 2.

解压 bugreport.zip 文件,可以找到包含电池历史记录的 CSV 文件。

4. 获取指定应用的电量消耗数据

  1. 获取应用的包名:
  • 确认你要获取电量消耗数据的应用包名。假设包名是 com.example.app
  1. 导出电量消耗数据:
  • 打开终端或命令提示符。
  • 输入以下命令以获取电池统计信息并保存到文件:
adb shell dumpsys batterystats > batterystats.txt
  • 1.
  1. 过滤指定应用的电量消耗数据:
  • 通过以下命令过滤出指定应用的电量消耗信息:
grep -A 20 'com.example.app' batterystats.txt > app_batterystats.txt
  • 1.
  • 这个命令会在 batterystats.txt 中搜索包含应用包名的行,并输出之后的20行内容到 app_batterystats.txt 文件中。这可以帮助你捕捉到应用相关的电量消耗信息。根据输出内容的格式,你可能需要调整 -A 20 这个参数来获取更多或更少的行。
示例步骤

假设你的应用包名是 com.example.app

  1. 导出电池统计数据到文件:
adb shell dumpsys batterystats > batterystats.txt
  • 1.
  1. 过滤出指定应用的电量消耗数据:
grep -A 20 'com.example.app' batterystats.txt > app_batterystats.txt
  • 1.
查看过滤后的数据

打开生成的 app_batterystats.txt 文件,可以看到包含指定应用电量消耗的详细信息。

注意事项
  • 调整过滤参数: 根据输出的具体格式,你可能需要调整 grep 命令中的参数以获取完整的电量消耗数据。
  • 数据格式: batterystats.txt 文件中数据的具体格式可能因 Android 版本和设备不同而有所变化,确保过滤后的数据是你需要的。

5. 使用Battery Historiand解析bugreport.zip

搭建过程参考其他网络文章例如

Battery Historian 是 Google 提供的一种开源工具,用于可视化和分析 Android 设备的电池使用情况。它解析和展示从 Android 设备获取的电池使用历史数据,帮助开发者和用户识别影响电池寿命的因素,如应用程序的行为、系统事件、硬件使用情况等。

主要功能
  1. 电池消耗图表:
  • 提供详细的电池使用情况图表,展示设备在不同时间段的电量变化。
  • 可视化 wakelocks(应用程序或系统组件保持设备唤醒的时间)、应用程序使用情况、CPU 活动、网络连接等信息。
  1. 事件时间轴:展示设备上发生的各种系统事件,如屏幕状态变化、充电状态变化、应用程序启动和停止等。
  2. 应用程序电量使用:解析和展示各个应用程序的电量使用情况,帮助识别耗电大户。
  3. 硬件使用情况:提供各个硬件组件(如 Wi-Fi、蓝牙、GPS、传感器等)的使用情况和相应的电量消耗。
Battery Historian 的工作原理

Battery Historian 通过解析 Android 设备生成的 bugreport 文件获取电池使用历史数据。这些文件包含了设备在特定时间段内的详细系统日志和状态信息。

搭建完展示的页面:
  • 点击Browse上传对应的文件bugreport.zip

Android电量优化基本指南_性能优化

  • 上传成功后,生成的分析报告页面

Android电量优化基本指南_Android_02

  • 鼠标放在黑线上会展示电量的使用情况

Android电量优化基本指南_Android Studio_03

  • 英文大家看着懵逼 给大家安排个中文的吧

Android电量优化基本指南_数据_04

首先你要熟悉你的业务,知道在某一些时间cpu不存在占用或者某些后台任务不应该在特定的时间存在,然后根据分析得到对应的逻辑存在异常的情况,比如cpu占比高或者页面在不需要刷新的时候又进行了刷新等,从这里看不到细致的东西 需要跟业务结合判断发现问题,然后再根据其他手段比如:Android studio自带的Android Profiler查看内存占用以及cpu的占用情况、用开发者模式的显示视图更新定位是否在页面存在不合理的刷新。

6. Android studio自带的Android Profiler查看内存占用以及cpu的占用情况

  • 在CPU的面板点击record/stop记录一波数据

Android电量优化基本指南_性能优化_05

最后的结果你可以看到cpu的占用降低,对应的电量也会降低。

7. 用开发者模式的显示视图更新定位是否在页面存在不合理的刷新

因为涉及到app的隐私问题不能放出图这块,直接参考tech.meituan.com/2018/03/11/… 美团的优化吧,核心思想都是一样的,就是根据不同页面的耗电量不同,定位出对应的问题所有,有可能是部分布局不可见的时候页面还在刷新,也可能是一个小布局造成大布局的刷新等等..