android 人品测试,Android单元测试环境搭建采坑记录

添加依赖

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'

}

踩坑

以为环境配置好了,可以直接写测试用例run了是吧,此时无论你是什么问题,最终都是告诉你/app/build/outputs/apk/androidTest/app-debug-AndroidTest.apk does not exist on disk.或者你人品好,真的就没问题,当然大部分人应该是没问题的。但是本宝傻眼中,然后开始一步步采坑。

引入环境依赖后,可先使用./gradlew connecteAndroidTest命令检查测试环境。然后可使用./gradlew assembleDebug和./gradlew assembleDebugAndroidTest生成test包,在这一过程中会报错具体原因,而不是只显示apk does not exist on disk.

引入测试框架之后造成65536问题

$ ':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

以上问题,统统都是合并dex最大方法数的问题。

所以只需要配置multiDex的解决方案就好了。如果项目中引入了子Modul,记得需要在每个子module里面配置multiDex。

至此,你可能assembleDebug没有问题,但依旧无法找到apk,然后开始google。

Gradle-aware Make

6d38a8d37e15?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

Gradle-aware Make.png

实际上,这个默认配置是存在Gradle-aware Make的,是没有问题的。哪怕你按照他所说再加一个空白的Gradle-aware Make,也是不起作用的。他描述的这一问题其实在官方文档中时有关JUnit测试可能会编译两次的解决方案。

6d38a8d37e15?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

官方文档.png

Android Studio版本缓存问题

6d38a8d37e15?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

Android Studio版本.png

我依照这个指导,删除了我之前版本3.0的一些遗留缓存文件,不过当时的我的问题并不是主要在这里,所以并不知道实际有没有影响。

采用Gradle projects的build

6d38a8d37e15?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

Gradle projects的build.png

采用此方法,并且可以尝试点击assembleAndroidTest、assembleDebug、assembleDebugAndroidTest、installDebug、installDebugAndroidTest等按钮来编译生成apk,或许有用。

我的问题所在

其实bb了这么多,这些并不是我真正的问题所在。

因为我现在所搞的是一个年久依旧在修的项目,里面有无数前辈的耕耘,所以最终在build.geadle文件中发现一段这样的代码:

6d38a8d37e15?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

build.geadle.png

它会使用gralde编译的任务名字,如果包含这些字,这个任务就不可用,则不会继续执行,则不会生成apk了。可怕,最后居然是这样,是我没仔细看这个文件,否则也不会踩前面那么多坑了。

test依赖库和androidsupport库版本问题

库内部有引用support-annotations,如果你已自己引入此库,如果版本一致,会报多个asm-license.txt文件问题,此时只需在删除这个文件即可。

6d38a8d37e15?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

如果不一致,可在test依赖中剃除annotations库即可。

6d38a8d37e15?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

关于stackoverflow上的其他回答

禁用instant run:这主要是由于你使用了jack编译器。并且jack编译器现在已不推荐。对于未使用jack编译器的项目,instant run对此并不影响。

6d38a8d37e15?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

官方文档

invalidating the caches and restarting:很多时候,这个很有用,但是我是gradle有问题,因此并不知晓针对此问题是否可行。

一加手机的问题

至此,环境都已ok,可以开始正常运行单测了。但是在一加手机上,run起来,没有成功没有失败,一直是在过程当中,无法正常运行。目前此情况在一加3T手机上出现,小米三星暂未出现,原因不明,知道了再补吧。

参考文档

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值