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