Android 使用 Espresso 的仪器测试失败:javax.inject.Provider 中的 NoSuchMethodError get()

Android instrument test with Espresso fails: NoSuchMethodError get() in javax.inject.Provider

当我 运行 我的 Android 仪器测试时,Espresso class 初始化失败,堆栈跟踪如下:

java.lang.NoSuchMethodError: No interface method get()Ljava/lang/Object; in class Ljavax/inject/Provider; or its super classes (declaration of 'javax.inject.Provider' appears in /data/app/com.myapp.mock.debug-2/base.apk)
at android.support.test.espresso.DaggerBaseLayerComponent.idlingResourceRegistry(DaggerBaseLayerComponent.java:101)
at android.support.test.espresso.Espresso.<clinit>(Espresso.java:52)
...

我不知道是否相关,但我的项目使用 Kotlin。

有什么想法吗?

我认为您在项目中使用了 DI。参考 Donn Felker 博客,

http://www.donnfelker.com/android-studio-espresso-2-0-classnotfoundexception/

希望对您有所帮助。

解决方法是在应用的proguard文件中添加如下内容:

-keep class javax.inject.* { *; }

否则 get() 方法将被 Proguard 移除。