运行Android Espresso UI测试时ListFuture非法访问DirectExecutor报错如何解决
问题根源
这个错误是androidx.test.core库和androidx.concurrent:concurrent-futures库版本不兼容导致的:1.4.0及以上版本的androidx.test.core依赖的DirectExecutor类是包可见的,只要项目中被其他依赖引入了不匹配版本的concurrent-futures,就会触发类访问权限报错。
解决方案
按优先级尝试以下操作即可解决:
- 统一对齐所有测试依赖的版本,将所有
androidx.test相关的依赖升级到最新稳定版,确保版本号匹配:
可参考的稳定版本组合:androidx.test:core:1.5.0 androidx.test.espresso:espresso-core:3.5.1 androidx.test.ext:junit:1.1.5 androidx.test:runner:1.5.2 - 在app模块的
build.gradle中添加强制依赖约束,锁定concurrent-futures的兼容版本,避免其他依赖拉取不兼容的版本:
如果是Groovy语法:
如果是Kotlin DSL语法:configurations.all { resolutionStrategy { force "androidx.concurrent:concurrent-futures:1.1.0" } }configurations.all { resolutionStrategy { force("androidx.concurrent:concurrent-futures:1.1.0") } } - 如果以上配置完仍然报错,可以直接禁用测试框架的屏幕捕获功能绕开问题,两种实现方式:
- 在测试类上加注解
@DisableDeviceCapture - 运行测试前执行adb命令
adb shell setprop debug.android_testing.disable_screen_capture true
- 在测试类上加注解
- 完成配置后执行
./gradlew clean清理构建缓存,再重新运行测试即可。
内容的提问来源于stack exchange,提问作者thebluepandabear
相关产品推荐
相关产品推荐

