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

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

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。

任何想法?

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

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

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

我想你在你的项目中使用DI。 请参阅Donn Felker博客,

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

希望这可以帮助你。