天天看點

手機發燙是為何:App 電量測試定位方法

随着移動網際網路的快速發展,手機的實用性、娛樂性越來越強。日常使用中發現,安裝了應用後,即使不怎麼使用,電量也會消耗很快。但如果恢複出場設定充滿電後,手機可以待機很長時間。真相隻有一個:手機耗電的最終元兇是軟體。

在各大應用市場中搜尋“電量管理”相關應用,每個應用都有幾萬到幾十萬次的下載下傳量。這說明,越來越多的使用者開始關注應用電量問題。是以,在研發階段,有效的檢測和定位電量問題,是十分重要的工作。

如何能夠有效的檢測和定位應用的電量問題呢?可以從兩個方面入手:一方面,從手機系統入手,了解ROM對應用電量消耗的統計原理,進而從代碼層規避不必要的電量消耗。另一方面,從應用本身入手,在保證使用者體驗的前提下,盡可能減少不必要的操作。

下面分享下,在對應用電量優化過程中所做的專項測試工作。

手機發燙是為何:App 電量測試定位方法

小結:可以看出,目前業界現有的電量測試方法很多。除了借助于其他裝置監測整機電量消耗的硬體測試方案外,android系統也提供了各種擷取應用電量消耗的方法。

方法各有優勢。但,都是定位于擷取整體電量消耗(整機、應用)。對于開發和測試人員最關注的問題:有效定位導緻應用電量消耗的具體原因,仍然無法解決。

在産品研發階段,能夠快速擷取應用電量消耗,準确定位問題原因的測試方法,是開發和測試人員最需要的方法。是以,從2016年初開始,我們确定了電量測試工作的開展方向:

1、理清原理:Android系統電量統計原理;

2、調整政策:關注整機的硬體測試方案替換為關注APP的軟體測試方案;

3、準确定位:擷取更詳細的資料;

4、提升效率:自動化電量測試方案建設。

在對業界現有測試工具的了解中,我們發現Android提供了對應用電量統計的系統工具“耗電排行”。

通過解包ROM源碼并反編譯Settings.apk,找到了Android系統對應用電量消耗統計的接口:com.android.internal.os.BatteryStatsHelper(5.0之後類名)中的方法processAppUsage。該方法中統計了系統對應用各部分的電量消耗:

手機發燙是為何:App 電量測試定位方法

在解讀源碼的過程中,發現了一個有意思的檔案power_profiler.xml。該檔案中列出了手機廠商針對機型硬體定義的機關時間元器件電量消耗值。由于檔案内容的差異,進而導緻了,同樣的應用、同樣的操作場景、同樣的外界環境,在不同手機上電量消耗不同。

手機發燙是為何:App 電量測試定位方法

不同手機<code>power_profiler.xml</code>檔案

小結:通過解讀源碼,掌握到系統對應用電量消耗的統計方法。如果可以在測試過程中擷取到組成應用整體消耗的各部分的消耗值,就可以大體定位到問題方向。

硬體測試采集的是整機的電流值,由于外接幹擾因素的影響其他應用、手機環境、網絡環境、人為因素等,經常導緻的測試結果是:資料波動大、無法定位原因。并且,随着手機硬體、外觀的調整,越來越多的機器無法自主拆卸電池,而廠商對内置版本的電量要求卻越來越嚴格。目前現有的硬體測試方案,無法繼續滿足在研發階段對應用電量的有效保障。

既然Android系統已經提供了對單個應用的電量統計應用,我們就可以利用源碼并結合實際的需求,對已有的系統工具進行二次開發,通過軟體的方式完成對單個應用耗電量的測試。

理清了系統對應用的電量統計原理後,我們發現“耗電排行工具”并沒有詳細輸出組成應用總體電量消耗的每一部分的消耗值。是以,在解決“準确定位”的問題上,首先能夠做的工作就是進一步細化資料。

“工欲善其事必先利其器”。

我們開發了以下兩個工具,支援擷取更詳細的資料。

【工具一:PowerStat2.0】

該工具是對系統“耗電排行工具”的二次開發。使用系統計算公式和API進行計算。

相比較原工具,完善以下幾個特性:

1、資料展示:除了展示組成應用總體電量消耗的每一部分的消耗值,同時顯示使用時長、次數及資料傳輸量資訊;

2、傳感器細分;

3、展示<code>power_profiler.xml</code>;

4、提供定時測試功能。

手機發燙是為何:App 電量測試定位方法

【工具二:CPUMonitor】

通過日常監控和使用者回報發現,導緻應用電量消耗升高的最常見問題是CPU問題:

手機發燙是為何:App 電量測試定位方法

華為手機使用者回報電量問題

手機發燙是為何:App 電量測試定位方法
手機發燙是為何:App 電量測試定位方法

日常監控電量異常升高問題

依據作業系統的概念—程序是由一個或多個線程組成,可以将“準确定位”問題進一步細化到擷取線程的CPU時間片消耗。

為了能夠在電量測試的同時進行CPU時間片資料的采集,并盡可能減少其他消耗的引入,我們開發了一個手機端的資料采集工具:CPUMonitor。原理如下:

手機發燙是為何:App 電量測試定位方法

工具具備以下幾個特性:

1、廣播作為工具驅動方式,友善應用于自動化腳本控制;

2、資料源取自系統:權威、詳細;

3、多樣的采集模式:頻繁模式(freq)、觸發模式(lazy)。

優勢:

1、安裝使用無權限要求;

2、可與電量測試同時進行;

3、資料取自系統保證準确性;

4、觸發模式保證了最小性能消耗。

小結:目前,工具已經應用于多個移動端應用的電量測試中。除了可以高效定位電量問題外,還可以在功能開發前預估電量消耗,從産品層協助政策制定。通過自研工具的開發,有效的将原有的硬體測試方案替換成關注應用電量消耗的軟體測試方案。自研工具擷取的資料,全部來自于系統提供的接口,保證了資料的準确有效性。

通過測試工具的開發,在一次電量測試過程中,已經能收集到幫助定位問題的足夠詳細的測試資料。是以,我們下一步需要思考的就是,如何能夠更加高效更加精準的擷取測試資料?

原有的電量測試流程:

手機發燙是為何:App 電量測試定位方法

存在的問題:

1、人工操作:裝置連接配接、環境清理、應用安裝、工具設定、初始資料采集;

2、人工操作:裝置斷開、場景操作執行、計時;

3、人工操作:裝置連接配接、資料采集&amp;儲存。

人工幹預每個環節導緻:資料準确性低、執行效率低。

各環節的優化方案:

資料采集:腳本驅動+測試工具 替代 手動執行指令行;

操作執行:自動化腳本 替代 手工操作;

流程控制:PC控制 替代 人工控制。

手機發燙是為何:App 電量測試定位方法
手機發燙是為何:App 電量測試定位方法

優化後的電量測試流程:

手機發燙是為何:App 電量測試定位方法

解決需人工連接配接裝置的問題:将傳統的USB線中間增加硬體控制子產品後,可由PC端的腳本控制硬體的斷開連接配接。

解決USB連接配接斷開後場景操作的執行問題:傳統的解決方案:将自動化腳本放到手機端執行。

存在的問題:手機必須要有root權限。

解決的方案:adb無線控制,下發指令。

小結:通過全流程的自動化處理,減少人工幹預,除了提高資料的準确性外,有效的提升了測試效率。以1小時待機電量測試為例,原測試流程和自動化測試流程相比較:

手機發燙是為何:App 電量測試定位方法

總結下我們在電量測試方面所做的工作:

1、通過對Android系統電量統計原理的分析,清晰的掌握到組成APP整體電量消耗的每一部分的消耗值,進而可以直接定位導緻電量問題的大體方向。

2、通過測試工具的開發,擷取到更加詳細的功耗資料,進而可以直接定位到具體代碼邏輯。

3、通過電量測試的自動化建設,有效提升測試效率,除了縮短測試時長、減少人力投入外,還提高了測試資料的準确性。

電量測試方案應用于移動終端産品,除了能快速檢測定位電量問題外,還可以協助開發及産品評估新增功能帶來的額外消耗。

通過一年多的工作,我們總結出一套理論與實踐相結合的電量優化檢測方法:

理論:在了解系統對應用電量統計原理的過程中,發現對wake lock消耗的計算在方法processAppUsage()中是沒有進行條件判斷的。也就是說,如果在亮屏時,代碼邏輯中仍然注冊了wake lock(測試的wake lock是沒有任何意義的),在對應用進行電量統計時,就會計算上這部分的消耗:

手機發燙是為何:App 電量測試定位方法
手機發燙是為何:App 電量測試定位方法

在寫代碼時,可以注意下,在進行wake lock注冊時,首先要判斷手機的狀态。

實踐:在對多個應用進行電量測試的過程中,發現不同産品根據産品特性不同,除了共性導緻電量異常的問題外,還會存在産品特性相關的操作場景。

我們抛開産品,抽離出共性問題,整理成下面這個表格:

手機發燙是為何:App 電量測試定位方法

在用例設計部分,我們将待機列為需要關注的場景,是因為使用者對待機時應用的電量消耗更為敏感。而在這個場景下,經常會出現由于代碼邏輯問題、産品政策問題導緻應用電量消耗異常。在操作過程中的電量消耗,是使用者預知的消耗。但如果使用不當,也會造成異常消耗。

想知道更多測試相關幹貨 請關注我們的微信公衆号:騰訊移動品質中心TMQ。