Ошибка инструментария не удалась из-за "java.lang.IllegalAccessError"

Я пишу тесты для 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;
    }

Ответы

Ответ 1

Наконец-то я нашел решение. Проблема была в зависимостях действительно, до сих пор неизвестно, почему она работала, а затем вдруг отказалась, но вот как должны выглядеть зависимости для вашего тестового модуля:

enter image description here

Итак, все, что вам нужно, чтобы все ваши библиотеки и библиотеки проектов были указаны для вашего тестового модуля и помечены как "Предоставлено", кроме Robotium lib, который является "Компиляция".

Ответ 2

В моем случае это связано с включением дублирующих банок.

Ответ 3

На основе вашего другого вопроса... Я думаю, что у меня есть аналогичная настройка, как и вы... Вот как много зависит мои зависимости (читайте подпункты в качестве зависимостей)

  • ActionBarSherlock
    • Android-поддержка-v4
  • Android-модуль
    • ActionBarSherlock
    • Android-поддержка-v4
  • Unit Test
    • Robotium
    • Модуль Android

Все зависимости устанавливаются как "скомпилированные"

Я использую ActionBarSherlock из исходного кода, и этот модуль проверяет "Является ли проект библиотеки".

Ответ 4

У меня только одна и та же проблема попыталась сделать следующее, поскольку она разрешила проблему.

Удалите файл android-support-v4 из вашего тестового проекта (или любой lib, который в этом случае удваивается). Очистите проекты и постройте их снова.

Ответ 5

Добавьте следующую строку:

manifestmerger.enabled=true 

в файл project.properties вашего прикладного проекта.

Помогло ли мне исправить:) Если проект с библиотечным проектом