【问题标题】:Instrumentation run failed due to 'java.lang.IllegalAccessError'由于“java.lang.IllegalAccessError”,检测运行失败
【发布时间】:2013-02-12 18:22:31
【问题描述】:

我现在正在为 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 line:130 只是:

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

【问题讨论】:

  • 听起来像是支持库的一些依赖问题。检查您的测试模块设置的依赖项(IDEA 中的 F4),支持库和 ActionBarSherlock 都具有“提供”范围
  • 你能告诉我更多吗?我有 abs、我的源代码所在的模块、我的测试所在的支持库和测试模块。这些依赖项应该是什么样子?
  • 在模块设置中确保为 abs 和支持库提供范围

标签: android testing intellij-idea


【解决方案1】:

我终于找到了解决办法。问题确实出在依赖项上,仍然不知道为什么它曾经工作然后突然被拒绝,但这是您的测试模块的依赖项应该是什么样子:

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

【讨论】:

  • 这对我有用。就我而言,我还依赖于 Mockito 库。我基本上将所有依赖项都标记为“已提供”,但我的测试项目直接依赖的库除外。那些被标记为“编译”。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    基于your other question...我想我的设置与您有些相似...这几乎是我的依赖项的设置方式(将子项读取为依赖项)

    • 动作条Sherlock
      • android-support-v4
    • 安卓模块
      • ActionBarSherlock
      • android-support-v4
    • 单元测试
      • 机器人
      • Android 模块

    所有的依赖都设置为“编译”

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

    【讨论】:

    • 我有相同的依赖项,仔细检查了它们,没有帮助 - 由于未知原因,我仍然无法运行一些测试。
    【解决方案4】:

    我刚刚遇到了同样的问题,尝试执行以下操作,因为它解决了问题。

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

    【讨论】:

      【解决方案5】:

      添加以下行:

      manifestmerger.enabled=true 
      

      到您的应用项目的 project.properties 文件中。

      帮我解决了 :) 有一个图书馆项目的项目

      【讨论】:

      • 你在哪里添加这一行?
      • 在eclipse项目的project.properties文件中(ui test projecT)
      【解决方案6】:

      我也犯了同样的错误。当我运行测试类并且一种方法会失败时(例如检查 textview 的文本,但文本与您检查的内容不同。),而不是显示正确的通常错误,即说出通常应该说的内容,它会显示非法访问错误,整个测试类将停止,而不运行其他测试。

      我的解决方案是读取非法访问错误并查看/google 搜索缺少哪个依赖项,然后将此依赖项添加到 build.gradle 文件的依赖项部分。

      例如。它向我显示了这个错误:java.lang.IllegalAccessError:非法类访问:'androidx.test.core.app.ListFuture' 试图访问'androidx.concurrent.futures.DirectExecutor'('androidx.test. core.app.ListFuture' ...等等等等。我从这篇文章和其他来源看到的是我的依赖项正在发生的事情,或者丢失了。

      所以从错误中我看到:...attempting to access 'androidx.concurrent.futures.DirectExecutor' ... 所以我用谷歌搜索了 'androidx.concurrent.futures.DirectExecutor' 依赖项。我找到了有关“并发”依赖的官方 android 网站,所以我添加了该依赖(实现“androidx.concurrent:concurrent-futures:1.1.0” ) 到我的 build.gradle(Module: MyAppName.app),在 dependencies 部分,我的问题就解决了!

      我在此处发布此内容,是为除操作员之外的其他人发布“非法访问错误”,甚至为看到此操作的操作员。所以阅读错误信息。某处可能会说其他缺少的方法并谷歌搜索它。我知道它有点不同的错误,但它仍然是“非法访问错误”,并且会帮助其他有类似错误的人。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多