添加依賴
android {
defaultConfig {
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
}
dependencies {
// App's dependencies, including test
implementation 'com.android.support:support-annotations:27.1.1'
// Testing-only dependencies
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}
踩坑
以為環(huán)境配置好了躯护,可以直接寫(xiě)測(cè)試用例run了是吧蔫仙,此時(shí)無(wú)論你是什么問(wèn)題,最終都是告訴你/app/build/outputs/apk/androidTest/app-debug-AndroidTest.apk does not exist on disk.
或者你人品好,真的就沒(méi)問(wèn)題够坐,當(dāng)然大部分人應(yīng)該是沒(méi)問(wèn)題的。但是本寶傻眼中崖面,然后開(kāi)始一步步采坑元咙。
引入環(huán)境依賴后,可先使用./gradlew connecteAndroidTest
命令檢查測(cè)試環(huán)境巫员。然后可使用./gradlew assembleDebug
和./gradlew assembleDebugAndroidTest
生成test包庶香,在這一過(guò)程中會(huì)報(bào)錯(cuò)具體原因,而不是只顯示apk does not exist on disk
.
引入測(cè)試框架之后造成65536問(wèn)題
- $ ':transformDexArchiveWithExternalLibsDexMergerForDebug'
- $ ava.lang.RuntimeException: java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: Unable to merge dex"
- $ com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536
以上問(wèn)題简识,統(tǒng)統(tǒng)都是合并dex最大方法數(shù)的問(wèn)題赶掖。
所以只需要配置multiDex的解決方案就好了。如果項(xiàng)目中引入了子Modul七扰,記得需要在每個(gè)子module里面配置multiDex倘零。
至此,你可能assembleDebug沒(méi)有問(wèn)題戳寸,但依舊無(wú)法找到apk呈驶,然后開(kāi)始google。
Gradle-aware Make
實(shí)際上疫鹊,這個(gè)默認(rèn)配置是存在Gradle-aware Make的袖瞻,是沒(méi)有問(wèn)題的。哪怕你按照他所說(shuō)再加一個(gè)空白的Gradle-aware Make拆吆,也是不起作用的聋迎。他描述的這一問(wèn)題其實(shí)在官方文檔中時(shí)有關(guān)JUnit測(cè)試可能會(huì)編譯兩次的解決方案。
Android Studio版本緩存問(wèn)題
我依照這個(gè)指導(dǎo)枣耀,刪除了我之前版本3.0的一些遺留緩存文件霉晕,不過(guò)當(dāng)時(shí)的我的問(wèn)題并不是主要在這里,所以并不知道實(shí)際有沒(méi)有影響捞奕。
采用Gradle projects的build
采用此方法牺堰,并且可以嘗試點(diǎn)擊assembleAndroidTest、assembleDebug颅围、assembleDebugAndroidTest伟葫、installDebug、installDebugAndroidTest等按鈕來(lái)編譯生成apk院促,或許有用筏养。
我的問(wèn)題所在
其實(shí)bb了這么多斧抱,這些并不是我真正的問(wèn)題所在。
因?yàn)槲椰F(xiàn)在所搞的是一個(gè)年久依舊在修的項(xiàng)目渐溶,里面有無(wú)數(shù)前輩的耕耘辉浦,所以最終在build.geadle文件中發(fā)現(xiàn)一段這樣的代碼:
它會(huì)使用gralde編譯的任務(wù)名字,如果包含這些字茎辐,這個(gè)任務(wù)就不可用盏浙,則不會(huì)繼續(xù)執(zhí)行,則不會(huì)生成apk了荔茬》媳欤可怕,最后居然是這樣慕蔚,是我沒(méi)仔細(xì)看這個(gè)文件丐黄,否則也不會(huì)踩前面那么多坑了。
test依賴庫(kù)和androidsupport庫(kù)版本問(wèn)題
庫(kù)內(nèi)部有引用support-annotations孔飒,如果你已自己引入此庫(kù)灌闺,如果版本一致,會(huì)報(bào)多個(gè)asm-license.txt文件問(wèn)題坏瞄,此時(shí)只需在刪除這個(gè)文件即可桂对。
如果不一致,可在test依賴中剃除annotations庫(kù)即可鸠匀。
關(guān)于stackoverflow上的其他回答
禁用instant run
:這主要是由于你使用了jack編譯器蕉斜。并且jack編譯器現(xiàn)在已不推薦。對(duì)于未使用jack編譯器的項(xiàng)目缀棍,instant run對(duì)此并不影響宅此。
invalidating the caches and restarting
:很多時(shí)候,這個(gè)很有用爬范,但是我是gradle有問(wèn)題父腕,因此并不知曉針對(duì)此問(wèn)題是否可行。
一加手機(jī)的問(wèn)題
至此青瀑,環(huán)境都已ok璧亮,可以開(kāi)始正常運(yùn)行單測(cè)了。但是在一加手機(jī)上斥难,run起來(lái)枝嘶,沒(méi)有成功沒(méi)有失敗,一直是在過(guò)程當(dāng)中蘸炸,無(wú)法正常運(yùn)行躬络。目前此情況在一加3T手機(jī)上出現(xiàn),小米三星暫未出現(xiàn)搭儒,原因不明穷当,知道了再補(bǔ)吧。
參考文檔
The APK file does not exist on disk
Espresso not finding test apk
Android Test release notes
Google文檔---已知問(wèn)題
Test apps on Android