由于'java.lang.IllegalAccessError'导致检测运行失败

时间:2013-02-12 18:22:32

标签: android testing intellij-idea

我正在为Android项目编写测试,只是不明白为什么会这么痛苦!经过一整天的设置,我终于得到了它的工作,但现在,在我写了几个测试类之后,Intellij IDEA站了起来:

Test failed to run to completion. Reason: 'Instrumentation run failed due to 'java.lang.IllegalAccessError''. Check device logcat for details
Test running failed: Instrumentation run failed due to 'java.lang.IllegalAccessError'

我几分钟前运行的测试不能再运行了。考虑到我回滚到我最新的提交,其中一切都很理想,我没有改变任何设置,我只是想知道为什么。

这是logcat所说的:

02-12 20:16:09.398: E/AndroidRuntime(4922): FATAL EXCEPTION: main
02-12 20:16:09.398: E/AndroidRuntime(4922): java.lang.IllegalAccessError: Class ref in pre-verified class resolved to unexpected implementation
02-12 20:16:09.398: E/AndroidRuntime(4922):     at com.actionbarsherlock.view.MenuInflater$MenuState.readItem(MenuInflater.java:327)
02-12 20:16:09.398: E/AndroidRuntime(4922):     at com.actionbarsherlock.view.MenuInflater.parseMenu(MenuInflater.java:147)
02-12 20:16:09.398: E/AndroidRuntime(4922):     at com.actionbarsherlock.view.MenuInflater.inflate(MenuInflater.java:97)
02-12 20:16:09.398: E/AndroidRuntime(4922):     at <package>.ui.CheckPasswordActivity.onCreateOptionsMenu(CheckPasswordActivity.java:130)
02-12 20:16:09.398: E/AndroidRuntime(4922):     at android.support.v4.app._ActionBarSherlockTrojanHorse.onCreatePanelMenu(_ActionBarSherlockTrojanHorse.java:45)
02-12 20:16:09.398: E/AndroidRuntime(4922):     at com.actionbarsherlock.ActionBarSherlock.callbackCreateOptionsMenu(ActionBarSherlock.java:556)
02-12 20:16:09.398: E/AndroidRuntime(4922):     at com.actionbarsherlock.internal.ActionBarSherlockNative.dispatchCreateOptionsMenu(ActionBarSherlockNative.java:60)
02-12 20:16:09.398: E/AndroidRuntime(4922):     at com.actionbarsherlock.app.SherlockFragmentActivity.onCreatePanelMenu(SherlockFragmentActivity.java:154)
02-12 20:16:09.398: E/AndroidRuntime(4922):     at com.android.internal.policy.impl.PhoneWindow.preparePanel(PhoneWindow.java:407)
02-12 20:16:09.398: E/AndroidRuntime(4922):     at com.android.internal.policy.impl.PhoneWindow.doInvalidatePanelMenu(PhoneWindow.java:769)
02-12 20:16:09.398: E/AndroidRuntime(4922):     at com.android.internal.policy.impl.PhoneWindow$1.run(PhoneWindow.java:201)
02-12 20:16:09.398: E/AndroidRuntime(4922):     at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749)
02-12 20:16:09.398: E/AndroidRuntime(4922):     at android.view.Choreographer.doCallbacks(Choreographer.java:562)
02-12 20:16:09.398: E/AndroidRuntime(4922):     at android.view.Choreographer.doFrame(Choreographer.java:531)
02-12 20:16:09.398: E/AndroidRuntime(4922):     at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735)
02-12 20:16:09.398: E/AndroidRuntime(4922):     at android.os.Handler.handleCallback(Handler.java:725)
02-12 20:16:09.398: E/AndroidRuntime(4922):     at android.os.Handler.dispatchMessage(Handler.java:92)
02-12 20:16:09.398: E/AndroidRuntime(4922):     at android.os.Looper.loop(Looper.java:137)
02-12 20:16:09.398: E/AndroidRuntime(4922):     at android.app.ActivityThread.main(ActivityThread.java:5039)
02-12 20:16:09.398: E/AndroidRuntime(4922):     at java.lang.reflect.Method.invokeNative(Native Method)
02-12 20:16:09.398: E/AndroidRuntime(4922):     at java.lang.reflect.Method.invoke(Method.java:511)
02-12 20:16:09.398: E/AndroidRuntime(4922):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
02-12 20:16:09.398: E/AndroidRuntime(4922):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
02-12 20:16:09.398: E/AndroidRuntime(4922):     at dalvik.system.NativeStart.main(Native Method)

虽然我甚至没有触及过这个类,但CheckPasswordActivity行:130指的只是:

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getSupportMenuInflater();
        inflater.inflate(R.menu.menu_check_password, menu);
        return true;
    }

5 个答案:

答案 0 :(得分:23)

我终于找到了解决方案。确实存在依赖关系的问题,它仍然不知道为什么它曾经工作然后突然被拒绝,但是这里的依赖关系应该如何应用于你的测试模块:

enter image description here

总而言之,您需要确保为测试模块列出所有库和项目库,并将其标记为“已提供”,但Robotium lib除外,即“编译”。

答案 1 :(得分:2)

就我而言,这是由于包含了重复的罐子。

答案 2 :(得分:1)

基于your other question ......我想我的设置与你有点相似......这里几乎是我的依赖关系的设置(将子项作为依赖项读取)

  • ActionBarSherlock
    • 机器人支撑-V4
  • Android模块
    • ActionBarSherlock
    • 机器人支撑-V4
  • 单元测试
    • robotium
    • Android模块

所有依赖项都设置为“compile”

我使用源代码中的ActionBarSherlock,并且该模块已经选中了“是一个库项目”。

答案 3 :(得分:0)

我遇到了同样的问题,尝试按照以下方法解决问题。

从您的测试项目(或任何加倍的lib)中删除android-support-v4 lib。清理项目并重新构建。

答案 4 :(得分:0)

添加以下行:

manifestmerger.enabled=true 

到你的应用程序项目的project.properties文件。

我的修复方法:) 有一个图书馆项目的项目