web-dev-qa-db-ja.com

'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;
    }
16
Eugene

私はついに解決策を見つけました。問題は確かに依存関係にありました。なぜそれが機能していたのに突然拒否されたのかはまだ不明ですが、テストモジュールの依存関係は次のようになります。

enter image description here

したがって、全体として、すべてのライブラリとプロジェクトライブラリがテストモジュールにリストされ、「コンパイル」であるRobotium libを除いて、「提供済み」としてマークされていることを確認する必要があります。

23
Eugene

私の場合、重複したjarファイルが含まれていることが原因です。

2

に基づいて あなたの他の質問 ...私はあなたと少し似た設定をしていると思います...これが私の依存関係の設定方法です(依存関係としてサブアイテムを読んでください)

  • ActionBarSherlock
    • Android-support-v4
  • Androidモジュール
    • ActionBarSherlock
    • Android-support-v4
  • 単体テスト
    • ロボティウム
    • Androidモジュール

すべての依存関係はすべて「コンパイル」として設定されます

ソースコードからActionBarSherlockを使用し、そのモジュールで「ライブラリプロジェクトです」がチェックされています。

1
Matthieu

問題が解決したので、同じ問題を次のように実行しようとしました。

テストプロジェクトからAndroid-support-v4lib(またはその点で2倍になっているlib)を削除します。プロジェクトをクリーンアップして、再度ビルドします。

0
MatBos

次の行を追加します。

manifestmerger.enabled=true 

アプリケーションプロジェクトのproject.propertiesファイルに。

私のために修正しました:)ライブラリプロジェクトを含むプロジェクトがありました

0
cV2