当我运行我的Android测试时,为什么会出现非法访问错误?

6
当我在模拟器上运行Android测试时,出现了以下堆栈跟踪:
java.lang.NoClassDefFoundError: client.HttpHelper
at client.Helper.<init>(Helper.java:14)  
at test.Tests.setUp(Tests.java:15)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:164)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:151)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:425)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1520)
Caused by: java.lang.IllegalAccessError: cross-loader access from pre-verified class
at dalvik.system.DexFile.defineClass(Native Method)
at dalvik.system.DexFile.loadClass(DexFile.java:193)  
at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:203)
at java.lang.ClassLoader.loadClass(ClassLoader.java:573)
at java.lang.ClassLoader.loadClass(ClassLoader.java:532)
... 11 more

我从另一个项目运行我的测试。似乎有一些问题无法加载其他项目中的类。我之前已经运行了这些测试,但现在它们失败了。被测试的项目没有问题。
Helper 类的第14行是:
this.httpHelper = new HttpHelper(userProfile);

我创建了一个名为HttpHelper的类,负责执行http查询。但是我认为这个帮助类不再可用了,但我不知道原因。


Helper.java 的第 14 行是什么? - RickNotFred
你的项目中是否使用了外部库? 如果是这样,这篇文章中的说明可能会对你有所帮助。 - Diego Torres Milano
嗨,我按照文章所说做了,但它仍然有错误。起初,我将外部Java项目添加到“项目”选项卡中,然后在“顺序和导出”选项卡中进行了勾选。它仍然显示错误。在使用外部项目的行上出现了“跨加载器访问...”的错误。(实际上,外部项目在同一个工作区中) - emeraldhieu
我也没有看到这个问题,无论是包含外部JAR文件还是来自工作区的其他Java项目。 - Diego Torres Milano
这根本没有解决我的错误。 - JPM
1个回答

4
我遇到了同样的问题,但我的情况是在应用程序和测试项目中都添加了库引用。
通过从测试项目中删除对库的引用,只保留对应用程序项目的引用,问题得以解决。java.lang.IllegalAccessError异常和消息“Class resolved by unexpected DEX”是解决此问题的线索。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接