java.lang.IllegalAccessError:预验证类中的类ref解析为运行测试项目时意外实现?

时间:2012-06-22 11:30:10

标签: android unit-testing junit

我在实施项目工作正常后使用第三方库(zxing)实现项目然后我编写了一个测试项目来对我的项目进行单元测试。运行测试项目后,主项目,类及其方法是没有给出任何错误但是如果在主项目的那个方法中使用了任何zxing框架类,那么在运行时没有编译时会出现上述错误。请告诉我如何解决这个问题?

9 个答案:

答案 0 :(得分:32)

由于第三方库引用添加了两次,您收到此错误。您已在测试项目的构建路径中添加了应用程序路径。所以库引用自动添加到测试项目“。删除测试项目中属性 - > android下的任何库引用。

FYI, click here for detail explanation

答案 1 :(得分:11)

这是因为zxing jar文件被加载了两次, 您必须在编译时将zxing库设置为“提供”(如果您使用Maven编译代码),因此它不会将库添加到您的字节码中。这样你就不会得到错误

答案 2 :(得分:8)

不幸的是,我见过的最佳解决方案是使用带有这些代码行的脚本并使用Espresso v2.0:

adb shell setprop dalvik.vm.dexopt-flags v=n,o=v
adb shell stop installd
adb shell start installd

在开始测试之前执行它。只需要一次这样做就可以了。

答案 3 :(得分:5)

我在Intellij Idea中更改了测试项目设置。转到模块 - >依赖关系,然后将测试项目的范围设置为“提供”。

答案 4 :(得分:4)

我收到了这个错误,因为我正在使用番石榴,Espresso也含有番石榴。

如果您使用Gradle和Android Studio,则可以从依赖项中排除包,如下所示:

androidTestCompile('com.jakewharton.espresso:espresso:1.1-r3') {
   exclude group: 'com.google.guava'
}

答案 5 :(得分:3)

从Eclipse中Project的Java构建路径下的“Order and Export”选项卡中取消选中jar(在我的案例中为map和google play服务jar)。但是,请将它们添加到“Libraries”选项卡中。单击确定,清理项目并立即构建。有用。

答案 6 :(得分:2)

如果您不需要具有低API版本(< = 19)的设备,则可以保留传递依赖关系并创建具有更高API版本的模拟器。

仅在API低于Lollipop(API 21)的设备上发生这种情况。在高于/等于API 21的仿真器上运行测试正常运行,没有问题。

答案 7 :(得分:1)

我有时会遇到这个错误。只是build-> clean项目帮助了我

答案 8 :(得分:0)

我在api级别低于21时遇到此错误。 只是build-> rebuild项目对我有所帮助。