何為CTS?
相信小伙伴們都有用過各種款式的Android手機,如小米、魅族、華為、oppo、vivo,雖然他們的頁面長的都不太一樣,比如小米的長這樣:
魅族的:
oppo的:
還有垂死掙扎的錘子...
但是這些手機其實都是搭載的Android系統,只不過國內的手機廠商在原生Android的基礎上進行修改/定制。其實原生的Android長這樣:
這么多手機廠商都要改造成自己的UI,甚至要對Android底層進行改動,難免不會改出什么問題。所以Google為了這些定制的系統能夠符合統一的規范、兼容Android底層的API,就引入了CTS測試。
以下是其官方介紹
Compatibility Test suite系列兼容測試,Google定義了一個兼容性規范(Compatible Definition),而CTS就是為了確保某個測試符合該規范。從而基於Android的應用程序能在基於同一個api版本的設備上面運行。通過CTS測試的device可以獲得android的商標,並且享受android market的權限。
為什么需要CTS?
由於Google的開放策略,越來越多的終端廠商以及互聯網企業加入到手機終端商的領域,加劇了Android移動終端的碎片化,導致出現基於Android客戶端的App產品因為兼容性差,不能在用戶手機上正常安裝、運行錯誤、強制退出等問題,嚴重影響用戶的體驗。
通過CTS測試,可以保證
- 讓APP提供更好的用戶體驗,用戶可以選擇更多的適合自己設備的APP;
- 讓開發者設計更高質量的APP;
- 通過CTS的設備可以運行Android market;
CTS配置
下載和配置CTS
官網:http://source.android.com/compatibility/downloads.html
注意:此網站需要FQ
下載文件:(Android 4.4為例)
- Android 4.4 Compatibility Definition Document (CDD)
- Android 4.4 R3 Compatibility Test Suite (CTS) - ARM
- Android 4.4 R3 Compatibility Test Suite (CTS) - x86
- Android 4.4 R3 CTS Verifier - ARM
- Android 4.4 R3 CTS Verifier - x86
- Compatibility Test Suite (CTS)
- User Manual
CTS Media 1.1
配置CTS:
- 解壓Compatibility Test Suite對應的壓縮包
- 將解壓出來的android-cts文件夾,復制到SDK根目錄中
CTS目錄結構說明
CTS測試流程
測試准備
step1:測試環境:
-
linux系統(最好是64位的ubuntu)
-
需正確配置JAVA JDK , android SDK
step2:工具准備:
- 將下載的CTS包解壓到/data目錄
- 下載需要進行測試的軟件版本(ROM)
- 插入可用的SD卡,容量最好是大於1G
- 插入可用的Sim卡,如果為雙卡版本,需確保卡一的卡槽有可用的Sim卡.
- 寫入合法的IMEI號
step3:手機配置:
- 手機恢復出廠設置(Settings→Backup and reset→Factory data reset)
- 確保SD中有足夠的空間(大於1G),可將SD格式化清空。
- 確保手機里沒有Google賬號或者其他賬號存在
- 確保日期和時間的正確(開了Wifi或者數據連接以后會自動更新時間,時區選默認的)
- 設置屏幕為常亮(Settings→Display→Sleep→Never)
- 設置無鎖屏(Settings→Security→Set up screen lock→None)
安裝CtsDeviceAdmin.apk,(在android-cts/repository/testcases下,可用adb install CtsDeviceAdmin.apk),並進入Settings→Security→Device administrators開啟里面的兩個包
測試執行
進入到/android-cts/tools目錄輸入:
./ cts-tradefed
進入測試環境
再執行run cts --plan CTS進行整體測試
run cts -c android.app.cts.SystemFeaturesTest
測試過程持續時間超過10+小時
測試結果會生成在android-cts/repository/results目錄中的
testResult.xml
Log日志文件位於android-cts/repository/logs目錄下
CTS操作基本命令
分類 | 命令 | 說明 |
---|---|---|
Host | help | 基本命令幫助說明 |
Host | help all | 全部命令幫助說明 |
Host | exit | 退出控制台 |
Run | run cts --plan test_plan_name | 運行指定計划 |
Run | run cts --package/-p | 運行指定包 |
Run | run cts --class/-c [--method/-m] | 運行指定方法 |
Run | run cts --continue-session session_ID | 繼續運行指定回話ID |
Run | run cts [options] --serial/-s device_ID | 運行指定設備 |
Run | run cts [options] --shards number_of_shards | 運行多個設備 |
Run | run cts --help/--help-all | 運行幫助 |
List | l/list d/devices | 列出連接的設備 |
List | l/list packages | 列出所有測試包 |
List | l/list p/plans | 列出所有測試計划 |
List | l/list r/results | 列出已經保存的結果 |
CTS測試結果分析
測試報告的fail項分為兩類:
-
一類是可以waive的,可以waive的項是谷歌自身的原因,經谷歌同意可以不用處理的項。另一類是需要我們分析修復的。 關於可以waive的選項,可以waive的選項一般會有一個表格維護,這個表格會不定時更新,可主動向相關人員索取。
-
如果不是google waive項,請查看log,在異常log的附近會有一些相關的信息,看能否找到原因。如果在之前的版本上測試PASS,可定位一下OK版本和fail版本之間的代碼提交,進而縮小排除范圍。有些時候想在測試包里面加一些LOG信息,可以自行編譯工程代碼的CTS,用來測試調試。若實在不能分析,可向平台商(如MTK/Qualcomm)尋求幫助。