battery-historian工具需要使用bugreport中的BatteryHistory
1. 先斷開adb服務,然后開啟adb服務
adb kill-server 這一步很重要,因為當我們開發時做電量記錄時會打開很多可能造成沖突的東西。
為了保險起見我們重啟adb。
adb devices就會自動連接查找手機。當然也可以adb start-server
2. 重置電池數據收集數據,我們在開始的時候需要通過以下命令來打開電池數據的獲取以及重置:
adb shell dumpsys batterystats --enable full-wake-history
adb shell dumpsysbatterystats –reset
執行的效果如下:
上面的操作相當於初始化操作,如果不這么做會有一大堆的干擾的數據,看起來會比較痛苦。
然后把數據線直接拔掉(防止數據線造成充放電數據干擾),現在做一些測試,手動或者跑一些自動化的case
都行。經過一段時間后,我們重新連接手機確認adb連上了,運行下面這條命令來將bugreport的信息保存到
txt文檔中:
adb bugreport > bugreport.txt
或者用下面的命令也可以:
adb shell dumpsys batterystats > batterystats.txt
adb shell dumpsys batterystats > com.example.android.sunshine.app >batterystats.txt
加上包名可以限制輸出的數據是我們要檢測的。
后面這種方法生成的TXT文件是沒法上傳到battery-historian服務上面進行分析的,因為不兼容。
但是這個txt的數據可讀性不強。接下來我們就要用到這個
battery-historian工具了。
到此我們有兩種方式分析這個文件:(historian-V1之前的版本和historian-V2最新的版本)
historian-V1之前的版本分析方式:
將txt文檔轉化為html文件,命令如下:
python historian.py -a bugreport.txt > battery.html
上面的historian.py腳本是Python寫的,所以需要python環境,然后從github上下載這個腳本。
文件在github上面的scripts目錄下面,需要下載到命令行所在的目錄
注意:historian.py要與bugreport.txt在同一目錄下
上面兩條命令執行成功后,會在目錄下發現兩個文件
bugreport.txt和battery.html,這個時候我們用google瀏覽器打開html文件,可以看到如下信息:
各個參數的意義:
橫坐標:
上面的10,20代表的就是秒的意思,它是以一分鍾為周期,到第60秒的時候變為0。橫坐標就是一個時間范
圍,咱們的例子中統計的數據是以重置為起點,獲取bugreport內容時刻為終點。我們一共采集了多長時間的數據
,圖表下也有信息說明。
縱坐標:
縱坐標的數據就很麻煩了,數據量太多,一條一條來吧。
battery_level
電量,可以看出電量的變化。比如上圖中的數據顯示剛開始電量是100%,然后在第11秒-12秒中間的
某個時刻降到了99%。
plugged
充電狀態,這一欄顯示是否進行了充電,以及充電的時間范圍。例如上圖反映了我們在第22s插入了數
據線,然后一直持續了數據采集結束。
screen
屏幕是否點亮,這一點可以考慮到睡眠狀態和點亮狀態下電量的使用信息。
top
該欄顯示當前時刻哪個app處於最上層,就是當前手機運行的app,用來判斷某個app對手機電量的影響
,這樣也能判斷出該app的耗電量信息。該欄記錄了應用在某一個時刻啟動,以及運行的時間,這對我
們比對不同應用對性能的影響有很大的幫助。
wake_lock*
wake_lock該屬性是記錄wake_lock模塊的工作時間。是否有停止的時候等
running
界面的狀態,主要判斷是否處於idle的狀態。用來判斷無操作狀態下電量的消耗。
wake_lock_in
wake_lock有不同的組件,這個地方記錄在某一個時刻,有哪些部件開始工作,以及工作的時間。
gps
gps是否開啟
phone_in_call
是否進行通話
Sync
是否跟后台同步.
可以把鼠標停在某一項上面。可以看到何時sync同步啟動的,持續時間Duration多久。
電池容量不會顯示單一行為消耗的具體電量,這里只能顯示使用電池的頻率和時長,你可以看分時段
的剩余電量來了解具體消耗了多少電量。
Job
后台的工作,比如服務service的運行。從下面圖中可以看到qihoo的AppStore和魯大師都在運行后台
服務。
data_conn
數據連接方式的改變,上面的edge是說明采用的gprs的方式連接網絡的。此數據可以看出手機是使用
2g,3g,4g還是wifi進行數據交換的。這一欄可以看出不同的連接方式對電量使用的影響。
status
電池狀態信息,有充電,放電,未充電,已充滿,未知等不同狀態。
這一欄記錄了電池狀態的改變信息。
phone_signal_strength
手機信號狀態的改變。
這一欄記錄手機信號的強弱變化圖,依次來判斷手機信號對電量的影響。
health
電池健康狀態的信息,這個信息一定程度上反映了這塊電池使用了多長時間。
這一欄記錄電池狀態在何時發生改變,上面的圖中電池狀態一直處於good狀態。
plug
充電方式,usb或者插座,以及顯示連接的時間。
這一欄顯示了不同的充電方式對電量使用的影響。
historian-V2最新的版本的方式:
將生成bugreport.txt文件在http://localhost:9999 中上傳文件生成報告(前提在本地或者某服務器上搭好了
battery-historian項目環境)
其實在這里也可以看到兩種版本分析模式:
至此使用方式就介紹完畢。
另外再補充一下安卓的耗電模塊和一些總結:
如上,列出的一些常用的電量測試方法。綜合各方法的優缺點,在定制個性化電量測試工具之前,目前采用的方法是Battery Historian。目前行業內,App耗電測試有很多種方案,如果僅僅測試出一個整體的電量值,對於定位問題是遠遠不夠的。借助Battery Historian,可以查看自設備上次充滿電以來各種匯總統計信息,並且可以選擇一個App查看詳細信息。所以QA的測試結果反饋從“這個版本App耗電量”高,變成“這個版本CPU占用高”“這個版本WiFi掃描異常”,可以幫助更快的定位到問題原因及解決問題。