我正在使用Jake Wharton的Double Espresso库在我的应用中设置Instrumentation测试。测试在我的手机上正常运行但在任何虚拟设备上崩溃(我尝试过模拟器和Genymotion设备)。
我得到的错误是[先前] [(Instrumentation run failed due to 'java.lang.IllegalAccessError'. Gradle + Espresso)报告的IllegalAccessError
。然而,令我困惑的是为什么它只发生在虚拟设备上。如果设置应该没问题。它可以在物理设备上运行。
堆栈跟踪包括整个地方的错误,但报告为致命的错误是:
java.lang.IllegalAccessError: Class ref in pre-verified class resolved to unexpected implementation
at com.myApp.onCreate(MyApp.java:32)
at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1007)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4344)
at android.app.ActivityThread.access$1500(ActivityThread.java:135)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5017)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
at dalvik.system.NativeStart.main(Native Method)
无论如何,我尝试排除可能发生冲突的所有库,但我仍然无法使其工作。有没有人对这个问题可能有什么想法,甚至是如何排除故障?
这个问题似乎与应用程序中使用的daggger
有关。 MyApp:32指向创建ObjectGraph
的行,并且以下两行在stacktrace中。
W/dalvikvm﹕ Class resolved by unexpected DEX: Lcom/myApp/MyApp;(0xa4df7388):0x97542000 ref [Ldagger/ObjectGraph;] Ldagger/ObjectGraph;(0xa4df7388):0x97add000
W/dalvikvm﹕ (Lcom/myApp/MyApp; had used a different Ldagger/ObjectGraph; during pre-verification)
**更新:**问题可能与虚拟设备上的Dalvik VM有关。我的手机设置为ART,并报告了与Dalvik类似的问题previously。应该通过添加以下内容来修复:
androidTestCompile('com.jakewharton.espresso:espresso:1.1-r3') {
exclude group: 'com.squareup.dagger'
}
根据图书馆页面但似乎没有帮助。
答案 0 :(得分:4)
问题实际上是由espresso-support
库引起的。我还需要添加com.squareup.dagger
作为排除项,而我只是将排除项添加到其他库中。
androidTestCompile('com.jakewharton.espresso:espresso:1.1-r3') {
exclude group: 'com.squareup.dagger'
}
androidTestCompile ('com.jakewharton.espresso:espresso-support-v4:1.1-r3') {
exclude group: 'com.squareup.dagger' // this goes here too
exclude group: 'com.android.support', module: 'support-v4'
}