生成bugreport - 用於查看 tombstone crash信息


https://www.jianshu.com/p/a704e2268fe6

Android耗電量 - bugreport & Battery Historian

0.0612018.07.24 16:08:43字數 1789閱讀 2954

隨着Mobile App應用的不斷演進,我們已經不能滿足於僅僅實現功能,同時還要追求更高的質量和性能,因此耗電量、CPU占有率等性能問題顯得越來越重要。而以耗電量來舉例,其性能問題是與硬件離不開的,即要排查識別高耗能硬件,通過軟件的方式,來排查,是哪些操作或者代碼使得硬件在瘋狂耗能,並定位問題后進行解決。關於Android App耗電量問題的定位方式有很多種方法,具體介紹見這里,本文主要講解其中最為常用的一種方式,即通過 Bugreport 和 Battery Historian 分析。

一. 生成bugreport

Bug Report 包含各種能夠幫助我們修復Bug的設備日志,堆棧跟蹤和其他一些診斷信息。可以通過命令adb bugreport來獲取bugreport文件信息:

  1. 對於Android 7.0及以上,生成bugreport文件到指定目錄
adb bugreport <bug_report_path> 

若不指定路徑,則會生成到local目錄

  1. 對於Android 7.0及以上,為指定設備生成bugreport
adb devices
adb -s <device_serial_number> bugreport 
  1. 對於Android 6.0及以下
adb bugreport > <bugreport_name>.txt

二. bugreport 目錄結構

 
bugreport 目錄結構

通過adb命令生成的通常是一個ZIP文件,且該文件命名為bugreport-<BUILD_ID>-<DATE>.zip,解壓縮后,該文件夾中包含多個文件:

  1. bugreport-<BUILD_ID>-<DATE>.txt: 最重要的文件,輸出的診斷信息,包含:系統服務(dumpsys),錯誤日志(dumpstate),和系統日志信息(logcat)
  2. version.txt: Android 的發布號
  3. systrace.txt: 如果系統systrace是可用的,則會包含這個文件,關於Systrace tool的介紹見官網
  4. FS 文件夾dumpstate工具會將設備文件系統下的文件拷貝到FS文件夾下

三. Battery Historian

根據上面的內容可知,bugreport的生成非常簡單,目錄結構也很好理解,但問題是,這個生成的文件非常龐大,包含的信息量也很大,關於具體解析bug report的文件見官網,可以感受到其中的痛苦,因此Google針對Android5.0(API21)以上的系統開發了一個分析工具Battery Historian來解析bugreport文件,並用web圖形的形式展示出來。

Battery Historian工具需要使用bugreport中的 Battery History數據,我們可以在bugreport.txt中找到Battery History 數據攔的信息:

DUMP OF SERVICE batterystats: Battery History (0% used, 192 used of 256KB, 6 strings using 280): 0 (10) RESET:TIME: 2018-07-24-15-58-31 0 (2) 100 c41000e1 status=discharging health=good plug=none temp=300 volt=4326 charge=0 +running +wake_lock +wifi_radio +screen phone_state=off phone_signal_strength=great brightness=dim +wifi_running +wifi wifi_signal_strength=3 wifi_suppl=completed top=u0a1404:"com.thoughtworks.zion.host.demo" 0 (2) 100 c41000e1 user=0:"0" 0 (2) 100 c41000e1 userfg=0:"0" +1s605ms (1) 100 c41000e1 wifi_signal_strength=2 +4s617ms (1) 100 c41000e1 wifi_signal_strength=3 +15s166ms (2) 100 c41000e1 -top=u0a1404:"com.thoughtworks.zion.host.demo" +15s166ms (2) 100 cc1000e1 +wifi_scan +top=u0a58:"com.huawei.android.launcher" +16s417ms (2) 100 c41000e1 -wifi_scan -top=u0a58:"com.huawei.android.launcher" +16s660ms (2) 100 c41000e1 +top=u0a1403:"com.huawei.works" +16s794ms (2) 100 c41000e1 pkgactive=u0a1403:"com.huawei.works" +37s742ms (1) 100 cc1000e1 +wifi_scan +38s275ms (1) 100 c41000e1 -wifi_scan +52s773ms (1) 100 c41000e1 wifi_signal_strength=2 +57s744ms (1) 100 cc1000e1 +wifi_scan +58s283ms (1) 100 c41000e1 -wifi_scan +59s405ms (2) 100 c41000e1 stats=0:"remove-uid" +59s990ms (2) 100 c41000e1 temp=310 volt=4280 +1m01s804ms (1) 100 c41000e1 wifi_signal_strength=3 +1m30s293ms (2) 100 c41000e1 stats=0:"battery-state" +1m30s310ms (3) 100 c41800e1 status=full plug=usb temp=320 volt=4286 +plugged 

四. 安裝 Battery Historian

這里主要使用Docker,具體步驟如下:

  1. 安裝Docker
    直接在官網安裝或者通過在terminal中輸入brew cask install docker直接安裝
  2. 在docker中運行Battery Historian的鏡像,如果沒有運行過這個鏡像,則會自動下載並安裝,可以更改<port>端口,該端口指的是映射到本地的端口
docker run -p <port>:9999 gcr.io/android-battery-historian/stable:3.0 --port 9999 
  1. 若系統為Linux或者Mac OS X,在瀏覽器中訪問http://localhost:<port>,能看到如下頁面,則安裝成功
     
  2. 若系統為Windows,在步驟2之后還要進行以下幾步:
    (1)在BIOS系統中啟動虛擬化
    (2) 啟動docker后,它會告訴你機器正在使用的IP地址,例如,IP地址是123.456.78.90,則可以在 http://123.456.78.90:<port>訪問Historian

五. 使用Battery Historian打開bugreport

  1. 運行 Battery Historian
  2. USB連接設備
  3. 關閉正在運行的adb server
adb kill-server
  1. 重啟adb並檢查已連接的設備
adb devices
  1. 重置電池統計信息和歷史記錄
adb shell dumpsys batterystats --reset
  1. 讓系統記錄所有的的WakeLock信息
adb shell dumpsys batterystats --enable full-wake-history

一般情況下,設備空閑,屏幕關閉,最后CPU停止運行,wake_lock可以阻止CPU休眠,比如后台持續下載.該維度只記錄第一個使用wake_lock的app,如果需要記錄所有的,使用上面命令

  1. 拔出USB,對手機進行操作想要統計的應用,耗電記錄會在后台統計手機的耗電情況
  2. 操作完畢后,連接USB,並通過adb bugreport命令生成bugreport文件,將該文件上傳到localhost:<port>界面中,就可以開始分析了,生成的圖片類似如下:
     
  3. 最后不要忘了關閉全量記錄喚醒。保持開啟會造成性能問題,除非在電量收集階段,否則建議保持關閉。
adb shell dumpsys batterystats --disable full-wake-history

六. 使用Battery Historian查看數據

Bugreport文件包含整個手機的運行情況,而不是針對某一個特定的App,因此使用Battery Historian查看的情況也如此,需要注意當前展示的數據是選中的App還是全部App的疊加信息。默認顯示的圖表是全部App的疊加信息,當選中某個App時,圖表可能會有所不同,同時,圖表左側Y軸的指標字體會加粗,表示這幾個數據在選中后,數據會變為選中App的數據,而其他數據仍然是全部數據。

1.使用Battery Historian 圖表查看數據

Battery Historian 的圖表顯示了一段時間內與耗電量相關的事件,如圖所示Battery Historian圖表的一個例子:

 

 
bugreport圖表

 

其中標號的意義是:

  • 標號1:從下拉列表中添加其他指標;
  • 標號2:將鼠標懸停在信息圖標上可以查看有關每個指標的詳細信息,包括圖表中使用的不同顏色代表意義的介紹;
  • 標號3:將鼠標懸停在某個條目上可以查看該指標的更多詳細信息,以及時間線上特定點的耗電量信息;
2.查看指定App數據

Battery Historian除了能夠提供宏觀的系統層面的信息,還能夠提供針對指定App的可視化數據和表格信息,這表格主要信息包括:

  • Device estimated power use等基本信息
  • Networks Information:app網絡信息
  • Wakelocks:喚醒鎖信息,一般和業務強相關
  • Services:服務信息,查看App開啟的services信息
  • Process info:進程信息

Battery Historian圖表下為數據分析,包括三個Tab,如下圖所示,可以查看App更多信息:

 

 
數據分析Tab

 

其中,標號所代表的意義是:

    • 標號1:System Stats 分組包含系統級別的數據,比如屏幕亮度等。這一欄顯示了系統發生的總體情況,可以用來測試是否存在外部影響事件;
    • 標號2:App Stats分組包含針對指定APP的詳細信息;
    • 標號3:可以根據不同的分類標准對APP進行排序;
    • 標號4:在下拉列表中選擇指定的APP后可在App Stats中查看具體信息,App Stats所展示的都是所選定App產生的數據,不會受到外部因素的影響;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM