web-dev-qa-db-ja.com

java.lang.IllegalAccessError:事前検証済みのクラスのクラス参照が、テストプロジェクトの実行中に予期しない実装に解決されましたか?

実装プロジェクトが正常に動作した後、サードパーティのライブラリ(zxing)を使用してプロジェクトを実装しました。その後、プロジェクトを単体テストするために1つのテストプロジェクトを作成した後です。エラーがありますが、メインプロジェクトのそのメソッド内でzxingフレームワーククラスが使用されている場合、コンパイル時にまだ実行時に上記のエラーが発生します。この問題の解決方法を教えてください。

30
ADIT

サードパーティのライブラリ参照が2回追加されたため、このエラーが発生しています。テストプロジェクトのビルドパスにアプリケーションパスを追加しました。したがって、ライブラリ参照はテストプロジェクトに自動的に追加されます。プロパティ-> Androidで、テストプロジェクトのライブラリ参照を削除します。

参考までに、 詳細はこちらをクリック

32
Dasari

これは、zxing jarファイルが2回ロードされているためです。コンパイル時にzxingライブラリを "Provided"(Mavenを使用してコードをコンパイルする場合)に設定する必要があるため、ライブラリは追加されません。バイトコード。そうすれば、エラーは発生しません

11

残念ながら、私が見てきた最善の解決策は、次のコード行でスクリプトを使用し、Espresso v2.0を使用することです。

adb Shell setprop dalvik.vm.dexopt-flags v=n,o=v
adb Shell stop installd
adb Shell start installd

テストを開始する前に実行してください。一度だけ実行する必要があります。

8
Jesús Castro

Intellij Ideaでテストプロジェクトの設定を変更しました。 [モジュール]-> [依存関係]に移動し、テスト済みプロジェクトのスコープを[提供済み]に設定します。

5
Fedor

このエラーが発生したのは、Guavaを使用していて、EspressoにもGuavaが含まれているためです。

GradleとAndroid Studioを使用している場合は、次のように依存関係からパッケージを除外できます。

androidTestCompile('com.jakewharton.espresso:espresso:1.1-r3') {
   exclude group: 'com.google.guava'
}
4
Janusz

プロジェクトのJavaビルドパス)の[注文とエクスポート]タブからjar(私の場合はマップとgoogle play services jar)のチェックを外しますが、[ライブラリ]タブに追加します。 OK、プロジェクトをクリーンして今すぐビルドします。

3
user3167973

APIバージョンが低い(<= 19)のデバイスが特に必要ない場合は、推移的な依存関係を残して、より高いAPIバージョンのエミュレータを作成できます。

これは、APIがLollipop(API 21)よりも低いデバイスでのみ発生します。 API 21以上のエミュレータでテストを実行すると、問題なく正常に実行されます。

2
azizbekian

このエラーが時々発生します。 build-> cleanプロジェクトだけが私を助けました

1

21未満のAPIレベルでこのエラーが発生しました。ビルド->再構築プロジェクトだけが私を助けました。

0
Cüneyt