16

私は今、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;
    }
4

6 に答える 6

23

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

ここに画像の説明を入力

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

于 2013-02-13T07:43:47.767 に答える
2

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

于 2013-11-06T01:52:03.390 に答える
1

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

  • アクションバーシャーロック
    • アンドロイド サポート v4
  • Android モジュール
    • アクションバーシャーロック
    • アンドロイド サポート v4
  • 単体テスト
    • ロボチウム
    • Android モジュール

すべての依存関係はすべて「コンパイル」としてセットアップされます

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

于 2013-02-12T22:00:01.910 に答える
0

次の行を追加します。

manifestmerger.enabled=true 

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

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

于 2013-09-16T06:44:57.633 に答える
0

問題が解決したので、まったく同じ問題が発生しました。

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

于 2013-07-10T12:51:48.213 に答える