Android單元測(cè)試環(huán)境搭建采坑記錄

添加依賴
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)題
  1. $ ':transformDexArchiveWithExternalLibsDexMergerForDebug'
  2. $ ava.lang.RuntimeException: java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: Unable to merge dex"
  3. $ 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
Gradle-aware Make.png

實(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ì)編譯兩次的解決方案。


官方文檔.png
Android Studio版本緩存問(wèn)題
Android Studio版本.png

我依照這個(gè)指導(dǎo)枣耀,刪除了我之前版本3.0的一些遺留緩存文件霉晕,不過(guò)當(dāng)時(shí)的我的問(wèn)題并不是主要在這里,所以并不知道實(shí)際有沒(méi)有影響捞奕。

采用Gradle projects的build
Gradle projects的build.png

采用此方法牺堰,并且可以嘗試點(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)一段這樣的代碼:


build.geadle.png

它會(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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末淹禾,一起剝皮案震驚了整個(gè)濱河市馁菜,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌铃岔,老刑警劉巖汪疮,帶你破解...
    沈念sama閱讀 217,084評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異毁习,居然都是意外死亡智嚷,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)纺且,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)盏道,“玉大人,你說(shuō)我怎么就攤上這事载碌〔轮觯” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,450評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵嫁艇,是天一觀的道長(zhǎng)朗伶。 經(jīng)常有香客問(wèn)我,道長(zhǎng)步咪,這世上最難降的妖魔是什么论皆? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,322評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮猾漫,結(jié)果婚禮上纯丸,老公的妹妹穿的比我還像新娘。我一直安慰自己静袖,他們只是感情好觉鼻,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,370評(píng)論 6 390
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著队橙,像睡著了一般坠陈。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上捐康,一...
    開(kāi)封第一講書(shū)人閱讀 51,274評(píng)論 1 300
  • 那天仇矾,我揣著相機(jī)與錄音,去河邊找鬼解总。 笑死贮匕,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的花枫。 我是一名探鬼主播刻盐,決...
    沈念sama閱讀 40,126評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼掏膏,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了敦锌?” 一聲冷哼從身側(cè)響起馒疹,我...
    開(kāi)封第一講書(shū)人閱讀 38,980評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎乙墙,沒(méi)想到半個(gè)月后颖变,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,414評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡听想,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,599評(píng)論 3 334
  • 正文 我和宋清朗相戀三年腥刹,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片汉买。...
    茶點(diǎn)故事閱讀 39,773評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡衔峰,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出录别,到底是詐尸還是另有隱情朽色,我是刑警寧澤,帶...
    沈念sama閱讀 35,470評(píng)論 5 344
  • 正文 年R本政府宣布组题,位于F島的核電站葫男,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏崔列。R本人自食惡果不足惜梢褐,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,080評(píng)論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望赵讯。 院中可真熱鬧盈咳,春花似錦、人聲如沸边翼。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,713評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)组底。三九已至丈积,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間债鸡,已是汗流浹背江滨。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,852評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留厌均,地道東北人唬滑。 一個(gè)月前我還...
    沈念sama閱讀 47,865評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親晶密。 傳聞我的和親對(duì)象是個(gè)殘疾皇子擒悬,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,689評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 說(shuō)明 本文主要介紹和Gradle關(guān)系密切、相對(duì)不容易理解的配置惹挟,偏重概念介紹茄螃。部分內(nèi)容是Android特有的(例如...
    jzj1993閱讀 15,624評(píng)論 1 62
  • 所有Android插件的基本擴(kuò)展缝驳。 你不需要直接使用這個(gè)连锯,你可以選擇下面幾個(gè)合適的直接使用 AppExtensio...
    我該忘了我自己w_u閱讀 3,360評(píng)論 0 5
  • Tinker 熱補(bǔ)丁接入過(guò)程中的坑!S糜运怖! =============== Tinker 介紹 官方接入說(shuō)明 gra...
    朱立志閱讀 2,107評(píng)論 0 2
  • (一) 理想是炸雷 漆黑天空里 震顫懦弱的靈魂 (二) 理想是北斗星 漫漫生途中 它是永遠(yuǎn)的方向 (三) 懷揣理想...
    小史努比閱讀 2,073評(píng)論 0 0
  • 這是第二遍讀《小王子》了。第一次讀的時(shí)候夏伊,其實(shí)并沒(méi)有太多體會(huì)摇展。除了對(duì)「第一號(hào)作品」的故事印象比較深之外,其他章節(jié)也...
    findingsea閱讀 966評(píng)論 0 3