Android Espresso测试遇NoClassDefFoundError:CallbackToFutureAdapter$Resolver缺失
Espresso测试中java.lang.NoClassDefFoundError问题解决办法
问题重现
运行Android Espresso UI测试时触发以下异常:
java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/concurrent/futures/CallbackToFutureAdapter$Resolver;
at androidx.test.core.app.DeviceCapture$forceRedrawGlobalWindowViews$1.run(DeviceCapture.kt:168)
已确认Espresso库为最新版本,且已添加ProGuard规则:"-keep class androidx.concurrent.futures.CallbackToFutureAdapter$Completer { *;}"
解决步骤
补全ProGuard规则:当前规则仅保留了
Completer内部类,而异常提示缺失的是Resolver类,需补充对应规则。可选择两种方式:- 单独保留两个内部类:
-keep class androidx.concurrent.futures.CallbackToFutureAdapter$Completer { *; } -keep class androidx.concurrent.futures.CallbackToFutureAdapter$Resolver { *; }- 一次性保留
CallbackToFutureAdapter所有内部类:
-keep class androidx.concurrent.futures.CallbackToFutureAdapter { *; } -keep class androidx.concurrent.futures.CallbackToFutureAdapter$* { *; }确认依赖完整性:检查模块级
build.gradle文件,确保引入了androidx.concurrent:concurrent-futures测试依赖,示例:androidTestImplementation "androidx.concurrent:concurrent-futures:1.1.0"版本可根据官方最新稳定版调整,确保包含
CallbackToFutureAdapter$Resolver类。清理重建项目:执行
Build > Clean Project,再执行Build > Rebuild Project,清除编译缓存后重新运行测试。
内容的提问来源于stack exchange,提问作者cdn user
相关产品推荐
相关产品推荐

