分为新老两个版本的SDK-TOOL,新版的放在另外一篇博客
Android App 电量分析https://blog.csdn.net/kan137g/article/details/84886277
耗电操作主要分为下面几种
- 高频通信
- CPU密集型的计算
- 传感器
- 频繁唤醒系统
解决方案
- -减少:您的应用可以裁剪多少操作?例如,它可以缓存下载的数据,而不是重复唤醒无线电重新下载数据?
- -推迟:应用程序是否需要立即执行操作?例如,它是否可以等到设备充电才将数据备份到云端?
- 合并:可以批量工作,而不是多次将设备置于活动状态?例如,真的有必要让几十个应用程序分别在不同的时间打开收音机发送消息?在一次唤醒收音机的过程中,信息可以传输吗?
举例:
- - 高频通信,使用合并或者裁剪的方式解决
- -所有的推送都用统一的推送服务,比如谷歌推送或者小米推送
- - 同时连接多个智能设备进行通信,真的有这个必要么,不需要的尽早断开长链接吧
- - CPU密集型,把一定的计算量放到服务器去执行
- - 传感器,类似于GPS之类的,看场景把这个没有太好的办法
测试工具
这里推荐两个:一个是Google官方提供的Battery Historian,一个是腾讯提供的一个测试电量的工具GT
使用Battery Historian分析电量使用情况
Battery Historian工具提供了一段时间内设备电池消耗的深入分析。在全系统级别,该工具以HTML表示形式从系统日志中查看与电源相关的事件。在特定应用程序级别,该工具提供了各种数据,可帮助您确定电池耗尽应用程序的行为。
- 大约在早上6:50,可视化显示电池电量相对急剧下降。
图表分析
系统整体分析
- - 排序方式(选择:电量使用估计 device estimated power use)
- 选择右方的systemstats(系统统计),查看是什么原因导致的耗电量过高
- 第二行能看到按耗电量排序的App,确定了耗电高的应用,再去看看耗电高的原因
单个应用分析
- 在App Selection下选择按名字筛选,选择应用的包名称
- 在Tables下选择,device estimated power use
- 选择右方的systemstats(系统统计),查看自己应用在哪些方面耗电量过高
根据特定的应用程序,以下数据可视化类别将更改为显示特定于应用程序的数据
- SyncManager.
- Foreground process.
- Userspace Wakelock.
- Top app.
- JobScheduler.
- Activity Manager Proc.
电池电量急剧下降,显示了三件事情:
- CPU正在运行,
- 应用程序已获取唤醒锁,
- 并且屏幕已打开。
SDK-TOOL版本小于25的使用下面指令
因为SDK下面的platform-tool的更新,所以不同版本的方式不一定管用
SDK-TOOl 版本小于25的应该是用这些指令
adb shell dumpsys batterystats --enable full-wake-history
//首先要初始化batterystats数据
adb shell dumpsys batterystats --reset
//使用monkey对要进行电量测试的应用进行操作
adb shell monkey -p 包名 -v 1000
// 收集Battery数据:
adb shell dumpsys batterystats > batterystats.txt
// battery-historian来生成我们可见HTML报告
python historian.py batterystats.txt > batterystats.html
SDK-TOOL版本大于于25的使用下面指令
然后再用GoLang去分析,由于环境比较复杂,新开一篇文章详情见Android App 电量分析
要从运行Android 7.0及更高版本的开发设备获取错误报告:$ adb bugreport bugreport.zip
对于6.0及更低版本的设备:
// 在高版本的SDK中,这条命令会提示不能打包压缩,而日志内容有几十M,一般需要等待一两分钟
$ adb bugreport > bugreport.txt