統(tǒng)計(jì)設(shè)備耗電數(shù)據(jù):Battery Historian工具(https://github.com/google/battery-historian)
Battery Historian是一種在設(shè)備上電池時(shí)檢查Android設(shè)備(Android 5.0 Lollipop及更高版本:API Level 21+)上的電池相關(guān)信息和事件的工具芍殖。它允許應(yīng)用程序開發(fā)人員在時(shí)間線上可視化系統(tǒng)和應(yīng)用程序級事件芬萍,并輕松查看自設(shè)備上次完全收費(fèi)以來的各種聚合統(tǒng)計(jì)信息。
一. 使用Docker
- 如果是使用Mac或Linux平臺(tái)的話笋籽,推薦直接通過docker運(yùn)行Battery Historian來完成拐袜;
docker -- run -p <port>:9999 gcr.io/android-battery-historian:2.1 --port 9999
之后在瀏覽器中輸入 http://localhost: 就可以查看檩咱,然后上傳bugreport文件進(jìn)行分析了次员。
- 如果是使用Windows平臺(tái)的話蔗候,也可以使用docker檀训,但是機(jī)子要在BIOS中開啟虛擬化(推薦使用源碼編譯)柑潦;
二. 源代碼構(gòu)建(源碼編譯)
1. battery-historian的安裝
- 首先下載配置Java環(huán)境 (要配置PATH);
- 接著下載配置Git環(huán)境 (要配置PATH)峻凫;
配置環(huán)境變量
GIT:D:\prgram\Git\bin
PATH:D:\program\Git\bin
檢查git安裝情況
cmd中輸入git version
- 接著下載配置Python 2.7環(huán)境 (要配置PATH渗鬼,不能是3.7版本);
配置環(huán)境變量
PATH:D:\program\python2.7.12
檢查python安裝情況
cmd中輸入python可以進(jìn)入python環(huán)境
- 接著下載配置Go環(huán)境 (要配置PATH和GOPATH以及GOBIN)荧琼;
新建Go項(xiàng)目路徑:GoProject
配置環(huán)境變量
GOBIN:D:\program\Go\bin
GOPATH:D:\program\Go\GoProject
GOROOT: D:\program\Go
PATH:%GOBIN%;%GOPATH%
檢查Go語言安裝情況
cmd中輸入go version譬胎,查看是否安裝成功;
注意:Battery Historian是Go語言的命锄,安裝Go的時(shí)候需要配置其bin的環(huán)境變量堰乔。
Python環(huán)境需要是2.7的(3.x不行), 建議使用pyenv管理本地的python環(huán)境累舷。
另外浩考,因?yàn)锽attery Historian是一個(gè)網(wǎng)頁版工具,,涉及一些JS引用被盈,有時(shí)需要翻墻析孽。
- 前面的配置其實(shí)很快就能完成,接下來就是下載Battery Historian的源碼來進(jìn)行編譯了;
$ go get -d -u github.com/google/battery-historian/…
下載完成之后只怎,代碼會(huì)下載到配置的GOPATH中袜瞬,可以去檢查下;
$ cd $GOPATH/src/github.com/google/battery-historian
切換到那個(gè)目錄,然后執(zhí)行setup.go開始編譯源碼;
go run setup.go
如果下載不成功別擔(dān)心身堡,可手動(dòng)下載closure-library邓尤、closure-compiler、flot-axislabels,解壓放到GOROOT目錄下third_party文件夾下方的closure-compiler汞扎、closure-library季稳、flot-axislabels文件夾( ../battery-historian\third_party),如果沒有均手動(dòng)創(chuàng)建澈魄。
注意:這一步編譯命令若是沒成功景鼠,需要注意:C:\Users\Administrator\src\github.com\google\battery-historian\compiled,文件夾下的文件有沒有成功下載:historian-optimized.js (不可少)
上面的步驟都完成之后就可以啟動(dòng) Battery Historian了痹扇,默認(rèn)端口是9999(注意還是在剛剛目錄下執(zhí)行)铛漓。
$ cd $GOPATH/src/github.com/google/battery-historian
$ go run cmd/battery-historian/battery-historian.go [--port <default:9999>]
待控制臺(tái)輸出listening on port:9999
的時(shí)候,可以打開瀏覽器輸入 http://localhost:9999 就可以看到鲫构。
2. battery-historian的使用:
Android 5.0及以上的設(shè)備, 允許我們通過adb命令dump出電量使用統(tǒng)計(jì)信息浓恶。
- 因?yàn)殡娏拷y(tǒng)計(jì)數(shù)據(jù)是持續(xù)的,會(huì)非常大结笨, 統(tǒng)計(jì)我們的待測試 App 之前先 reset 下包晰, 連上設(shè)備,命令行執(zhí)行:
初始化android電池電量數(shù)據(jù)
$ adb shell dumpsys batterystats --enable full-wake-history
$ adb shell dumpsys batterystats --reset
Battery stats reset.
- 斷開測試設(shè)備, 操作我們的待測試App禀梳;
- 重新連接設(shè)備, 使用adb命令導(dǎo)出相關(guān)統(tǒng)計(jì)數(shù)據(jù):
$ adb shell dumpsys batterystats > xxx.txt //得到整個(gè)設(shè)備的電量消耗信息
$ adb shell dumpsys batterystats > com.package.name > xxx.txt //得到指定app相關(guān)的電量消耗信息
或
// 此命令持續(xù)記錄輸出, 想要停止記錄時(shí)按Ctrl+C退出杜窄。( Android 6.0及以下版本請使用該導(dǎo)出命令)
$ adb bugreport > bugreport.txt
或
// 將bugreport的信息保存到.zip文件中(Android 7.0及以上版本請使用該導(dǎo)出命令)
$ adb bugreport bugreport.zip
// 通過 historian 圖形化展示結(jié)果
python historian.py -a bugreport.txt > battery.html
獲取到bugreport文件之后肠骆,將其上傳到Battery Historian上進(jìn)行分析(http://localhost:9999)算途,下面是它的輸出結(jié)果打開(圖形化展示電池的消耗情況)。
在頁面的下方我們可以查看這段時(shí)間內(nèi)系統(tǒng)的狀態(tài)system stats蚀腿,也可以選擇某個(gè)應(yīng)用查看應(yīng)用的狀態(tài)app stats:
其中我們可以看到 Device estimated power use 中顯示了估算的應(yīng)用耗電量值為0.14%嘴瓤。
3. 報(bào)表中各參數(shù)的意義
重要的參數(shù):WiFi、wake_lock莉钙、conn廓脆、mobile_ratio(蜂窩信號)
-
battery_level
電量,可以看出電量的變化磁玉。比如圖中的數(shù)據(jù)顯示剛開始電量是100%停忿,然后在第11秒-12秒中間的某個(gè)時(shí)刻降到了99%。
plugged
充電狀態(tài)蚊伞,這一欄顯示是否進(jìn)行了充電席赂,以及充電的時(shí)間范圍。例如上圖反映了我們在第22s插入了數(shù)據(jù)線时迫,然后一直持續(xù)了數(shù)據(jù)采集結(jié)束颅停。screen
屏幕是否點(diǎn)亮,這一點(diǎn)可以考慮到睡眠狀態(tài)和點(diǎn)亮狀態(tài)下電量的使用信息掠拳。top
該欄顯示當(dāng)前時(shí)刻哪個(gè)app處于最上層癞揉,就是當(dāng)前手機(jī)運(yùn)行的app,用來判斷某個(gè)app對手機(jī)電量的影響,這樣也能判斷出該app的耗電量信息喊熟。該欄記錄了應(yīng)用在某一個(gè)時(shí)刻啟動(dòng)柏肪,以及運(yùn)行的時(shí)間,這對我們比對不同應(yīng)用對性能的影響有很大的幫助芥牌。wake_lock*
wake_lock 該屬性是記錄wake_lock模塊的工作時(shí)間预吆。是否有停止的時(shí)候等。running
界面的狀態(tài)胳泉,主要判斷是否處于idle的狀態(tài)拐叉。用來判斷無操作狀態(tài)下電量的消耗。wake_lock_in*
wake_lock有不同的組件扇商,這個(gè)地方記錄在某一個(gè)時(shí)刻凤瘦,有哪些部件開始工作,以及工作的時(shí)間案铺。Sync
是否跟后臺(tái)同步蔬芥。
可以把鼠標(biāo)停在某一項(xiàng)上面】睾海可以看到何時(shí)sync同步 啟動(dòng)的笔诵,持續(xù)時(shí)間Duration多久。電池容量不會(huì)顯示單一行為消耗的具體電量姑子,這里只能顯示使用電池的頻率和時(shí)長乎婿,你可以看分時(shí)段的剩余電量來了解具體消耗了多少電量。APP selection
可查看某個(gè)應(yīng)用的數(shù)據(jù)街佑,如UID谢翎、CPU使用情況、相機(jī)調(diào)起次數(shù)等沐旨。
4. bugreport相關(guān)推薦
關(guān)于bugreport相關(guān)的知識推薦閱讀Android adb bugreport工具分析和使用這篇文章森逮,作者簡單地從源碼角度分析了adb bugreport
命令的運(yùn)行原理,結(jié)論是bugreport其實(shí)是啟動(dòng)了dumpstate service來輸出數(shù)據(jù)磁携,其中數(shù)據(jù)來源包括:
1.系統(tǒng)屬性
2./proc和/sys節(jié)點(diǎn)文件
3.執(zhí)行shell命令獲得相關(guān)輸出
4.logcat輸出
5.Android Framework Services信息基本使用dumpsys命令通過binder調(diào)用服務(wù)中的dump函數(shù)獲得信息
下面是其他的幾篇關(guān)于battery-historian使用的文章可供參考:
(1) Android性能專項(xiàng)測試之battery-historian使用
(2) Android性能專項(xiàng)測試之Batterystats
(3) Battery Historian 2.0 for windows環(huán)境搭建
(4) Android應(yīng)用耗電量分析與優(yōu)化建議
(5)使用Battery Historian分析電源使用情況
5. 關(guān)于電量方面的Android性能優(yōu)化
電量方面的性能優(yōu)化可以參考:
性能優(yōu)化典范中的Android性能優(yōu)化之電量篇
Android App 優(yōu)化之持久電量
Android性能優(yōu)化-電量優(yōu)化
Android后臺(tái)調(diào)度任務(wù)與省電
(1)為了減少電量的消耗褒侧,在蜂窩移動(dòng)網(wǎng)絡(luò)下,最好做到批量執(zhí)行網(wǎng)絡(luò)請求谊迄,盡量避免頻繁的間隔網(wǎng)絡(luò)請求
(2)使用Job Scheduler闷供,應(yīng)用需要做的事情就是判斷哪些任務(wù)是不緊急的,可以交給Job Scheduler來處理鳞上,Job Scheduler集中處理收到的任務(wù)这吻,選擇合適的時(shí)間,合適的網(wǎng)絡(luò)篙议,再一起執(zhí)行