【问题标题】:Instrumentation tests fail on virtual devices虚拟设备上的仪器测试失败
【发布时间】:2014-05-20 18:43:41
【问题描述】:

我正在使用 Jake Wharton 的 Double Espresso 库在我的应用程序中设置 Instrumentation 测试。测试在我的手机上运行良好,但在任何虚拟设备上都会崩溃(我尝试了模拟器和 Genymotion 设备)。

我得到的错误是 [previous]((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'
}

根据图书馆页面,但这似乎没有帮助。

【问题讨论】:

  • 您的模拟器和手机的 API 版本是否相同?手机没有root,对吗?
  • 是的......两者都有 API 19。还添加了与匕首有关的问题的提示。

标签: android android-testing android-espresso


【解决方案1】:

这个问题实际上是由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'
}

【讨论】:

    猜你喜欢
    • 2016-08-16
    • 2017-11-21
    • 2016-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-26
    • 1970-01-01
    相关资源
    最近更新 更多