android cts 编译,使用 Android studio 分析运行 CTS 用例
CTS 的用例其實是個大寶庫,是寫單元測試的典范,研究和學習這些用例的內容不管是對 Android 系統的研究還是對個人的技術提升都是很有幫助的。但是網絡上對于這部分的介紹卻很少,都只是講怎么運行 CTS 用例,沒有去深究這些 case 到底測了什么。這里僅拋磚迎玉,我們先從搭建環境開始。
必備材料:
1.Android 源代碼一套(沒有的同學參考我另外一篇帖子,我在百度盤共享了全套源碼)
2.此套源碼要完成編譯過程(我這里用的是 Android4.4.4 的源碼,使用 64 位 ubuntu14.04 發行版編譯,安裝了必要的依賴后直接編譯完成,全程無錯,無需修改任何源代碼文件)
下面我們以 WIFI 模塊的測試用例為例。
WIFI 模塊的測試用例在~/cts/tests/tests/net 目錄下,我們看下這個目錄的結構:
├── AndroidManifest.xml
├── Android.mk
├── jni
│ ├── Android.mk
│ └── NativeDnsJni.c
└── src
└── android
└── net
├── cts
│ ├── ConnectivityManagerTest.java
│ ├── CredentialsTest.java
│ ├── DhcpInfoTest.java
│ ├── DnsTest.java
│ ├── LocalServerSocketTest.java
│ ├── LocalSocketAddress_NamespaceTest.java
│ ├── LocalSocketAddressTest.java
│ ├── LocalSocketTest.java
│ ├── MailToTest.java
│ ├── NetworkInfo_DetailedStateTest.java
│ ├── NetworkInfo_StateTest.java
│ ├── NetworkInfoTest.java
│ ├── ProxyTest.java
│ ├── SSLCertificateSocketFactoryTest.java
│ ├── TrafficStatsTest.java
│ ├── Uri_BuilderTest.java
│ ├── UriTest.java
│ ├── UrlQuerySanitizer_IllegalCharacterValueSanitizerTest.java
│ ├── UrlQuerySanitizer_ParameterValuePairTest.java
│ ├── UrlQuerySanitizerTest.java
│ └── VpnServiceTest.java
├── http
│ └── cts
│ ├── ApacheHttpClientTest.java
│ ├── SslCertificate_DNameTest.java
│ ├── SslCertificateTest.java
│ └── SslErrorTest.java
├── ipv6
│ └── cts
│ └── PingTest.java
├── rtp
│ └── cts
│ ├── AudioCodecTest.java
│ ├── AudioGroupTest.java
│ └── AudioStreamTest.java
└── wifi
└── cts
├── ConcurrencyTest.java
├── NsdManagerTest.java
├── ScanResultTest.java
├── SupplicantStateTest.java
├── WifiConfigurationTest.java
├── WifiEnterpriseConfigTest.java
├── WifiFeature.java
├── WifiInfoTest.java
├── WifiManagerTest.java
└── WifiManager_WifiLockTest.java
把 net 目錄單獨拷貝一份,開始動手了,可以看到 net 目錄下還包含其他如 http、ipv6 等模塊的用例,我們只想分析 wifi 模塊的,其它不需要,刪掉,目錄結構變成這樣:
├── AndroidManifest.xml
├── Android.mk
└── src
└── android
└── net
└── wifi
└── cts
├── ConcurrencyTest.java
├── NsdManagerTest.java
├── ScanResultTest.java
├── SupplicantStateTest.java
├── WifiConfigurationTest.java
├── WifiEnterpriseConfigTest.java
├── WifiFeature.java
├── WifiInfoTest.java
├── WifiManagerTest.java
└── WifiManager_WifiLockTest.java
我們要導入 Android studio 進行分析,所以要稍微改造下使它像一個 Android 項目,我們在 src 下添加 bin、gen、libs 三個文件夾,最后變成這樣:
├── AndroidManifest.xml
├── Android.mk
├── bin
├── gen
├── libs
└── src
└── android
└── net
└── wifi
└── cts
├── ConcurrencyTest.java
├── NsdManagerTest.java
├── ScanResultTest.java
├── SupplicantStateTest.java
├── WifiConfigurationTest.java
├── WifiEnterpriseConfigTest.java
├── WifiFeature.java
├── WifiInfoTest.java
├── WifiManagerTest.java
└── WifiManager_WifiLockTest.java
很眼熟吧,沒錯,這就是 eclipse 下面的 Android 項目結構,只不過少了幾個其他的 assert,res 之類的文件夾而已,但我們不想用 eclipse,而分析這樣的代碼用 gradle 項目結構又很麻煩,所以下面講如何把 eclipse 項目原樣導入 Android studio。
把 eclipse 項目導入 Android studio:
1.file->open 打開項目
2.打開 module setting
3.設置 project
4.添加 source 文件夾
5.把 gen 文件夾也添加進去
6.點一下 gen 最右邊的 P,在彈出的對話框中勾選 For generated sources
7.Dependencies 界面把 SDK 設置為 19
8.新建一個 Android
9.structure 界面把各個文件夾設置正確,源碼文件夾中沒有 res 和 assets 沒有關系,這里不影響
10.Generated Sources 中設置 gen 目錄
11.把 4 個依賴的 jar 包拷貝到源碼 libs 目錄下,然后在 Libraries 中添加依賴的 jar 包,WIFI 模塊一共依賴 4 個 jar 包,這里添加 3 個
說明:
3 個 classes 開頭的 jar 包都在編譯完成的 out 文件夾下,這里手動改了名字而已
classes-cts.jar 對應~/out/target/common/obj/JAVA_LIBRARIES/ctstestrunner_intermediates/classes.jar
classes-deviceutil.jar 對應~/out/target/common/obj/JAVA_LIBRARIES/ctsdeviceutil_intermediates/classes.jar
classes-framework.jar 對應~/out/target/common/obj/JAVA_LIBRARIES/framework-base_intermediates/classes.jar
junit-4.10.jar 網上隨便能下載到
12.在 SDKs 中修改 Build target 為 19,并且把 classes-framework.jar 添加進來,且一定要在 android.jar 的前面,這是因為 framework.jar 中有一些系統的隱藏方法,所以要放在公用 API android.jar 的前面被調用
13.編輯 Configurations
14.新建一個 Android Tests
15.重命名,并選擇 runner 為 CtsTestRunner
16.項目 - 右鍵 - 開始 RUN RUN RUN
17.測試結束,可以看到我的設備 fail 了一條用例
這樣,我們完成了在 Android studio 運行 CTS 用例的過程,在 Android studio 中運行測試用例好處是方便調試,比如隨便斷點,方便閱讀,方便修改,語法糾錯 blablablabla……
如果我們想新寫一些用例,也可以在外面寫好再弄到源碼里配置 mk 文件編譯。
至于不同的模塊,可能依賴的 jar 包不同,但肯定都在~/out/target/common/obj/JAVA_LIBRARIES 下被編譯出來了,所以如果有同學調試其他的模塊因為依賴報錯的時候,可以根據出錯信息到這個目錄下去找。
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的android cts 编译,使用 Android studio 分析运行 CTS 用例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android 数据线读串口数据线,一种
- 下一篇: Android之自定义view引用xml