Java.lang.IncompatibleClassChangeError bei der Aufnahme von Espresso-Beitrag: 2.0

Ich habe eine Unterklasse von android.support.v7.widget.RecyclerView. Es funktioniert gut, wenn ich die Anwendung und die Prüfung.

Allerdings, wenn ich espresso-beitrage in meine gradle app-Datei Ich bekomme eine Ausnahme, wenn ich versuche, die gleichen Tests laufen. Die App funktioniert immer noch. Das gleiche Problem tritt in beiden sdk Versionen 21 und 22, auf Armv Emulator und Gerät. Mit einem x86 Emulator es stattdessen stattdessen.

Gradle

androidTestCompile 'com.android.support.test.espresso:espresso-contrib:2.0' 

Ausnahme

 java.lang.IncompatibleClassChangeError: xxx.DashboardActivity$1 at dalvik.system.DexFile.defineClassNative(Native Method) at dalvik.system.DexFile.defineClass(DexFile.java:226) at dalvik.system.DexFile.loadClassBinaryName(DexFile.java:219) at dalvik.system.DexPathList.findClass(DexPathList.java:321) at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:54) at java.lang.ClassLoader.loadClass(ClassLoader.java:511) at java.lang.ClassLoader.loadClass(ClassLoader.java:469) at xxx.DashboardActivity.onCreate(DashboardActivity.java:54) at android.app.Activity.performCreate(Activity.java:5990) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106) at android.support.test.runner.MonitoringInstrumentation.callActivityOnCreate(MonitoringInstrumentation.java:346) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2390) at android.app.ActivityThread.access$800(ActivityThread.java:151) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5257) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 

Adb logcat

 I/ActivityManager( 1229): START u0 {act=android.intent.action.MAIN flg=0x14000000 cmp=xxx/.activities.DashboardActivity} from uid 10059 on display 0 V/WindowManager( 1229): addAppToken: AppWindowToken{65964e3 token=Token{3f63d512 ActivityRecord{19743c9d u0 xxx/.activities.DashboardActivity t13}}} to stack=1 task=13 at 0 D/LifecycleMonitor( 2953): Lifecycle status change: xxx.activities.DashboardActivity@281384ef in: PRE_ON_CREATE V/WindowManager( 1229): Adding window Window{2d974c1a u0 Starting xxx} at 2 of 7 (after Window{27a98488 u0 com.android.launcher/com.android.launcher2.Launcher}) W/RecyclerView( 2953): setScrollingTouchSlop(): bad argument constant 315513600; using default value W/art ( 2953): Incompatible structural change detected: Structural change of android.support.v7.widget.RecyclerView$Adapter is hazardous (/data/dalvik-cache/x86/data@app@xxx-1@b ase.apk@classes.dex at compile time, /data/dalvik-cache/x86/data@app@xxx.test-1@base.apk@classes.dex at runtime): Virtual method count off: 26 vs 25 W/art ( 2953): Landroid/support/v7/widget/RecyclerView$Adapter; (Compile time): W/art ( 2953): Static fields: W/art ( 2953): Instance fields: W/art ( 2953): Z mHasStableIds W/art ( 2953): Landroid/support/v7/widget/RecyclerView$AdapterDataObservable; mObservable W/art ( 2953): Direct methods: W/art ( 2953): <init>()V W/art ( 2953): Virtual methods: W/art ( 2953): bindViewHolder(Landroid/support/v7/widget/RecyclerView$ViewHolder;I)V W/art ( 2953): createViewHolder(Landroid/view/ViewGroup;I)Landroid/support/v7/widget/RecyclerView$ViewHolder; W/art ( 2953): getItemCount()I W/art ( 2953): getItemId(I)J W/art ( 2953): getItemViewType(I)I W/art ( 2953): hasObservers()Z W/art ( 2953): hasStableIds()Z W/art ( 2953): notifyDataSetChanged()V W/art ( 2953): notifyItemChanged(I)V W/art ( 2953): notifyItemInserted(I)V W/art ( 2953): notifyItemMoved(II)V W/art ( 2953): notifyItemRangeChanged(II)V W/art ( 2953): notifyItemRangeInserted(II)V W/art ( 2953): notifyItemRangeRemoved(II)V W/art ( 2953): notifyItemRemoved(I)V W/art ( 2953): onAttachedToRecyclerView(Landroid/support/v7/widget/RecyclerView;)V W/art ( 2953): onBindViewHolder(Landroid/support/v7/widget/RecyclerView$ViewHolder;I)V W/art ( 2953): onCreateViewHolder(Landroid/view/ViewGroup;I)Landroid/support/v7/widget/RecyclerView$ViewHolder; W/art ( 2953): onDetachedFromRecyclerView(Landroid/support/v7/widget/RecyclerView;)V W/art ( 2953): onFailedToRecycleView(Landroid/support/v7/widget/RecyclerView$ViewHolder;)Z W/art ( 2953): onViewAttachedToWindow(Landroid/support/v7/widget/RecyclerView$ViewHolder;)V W/art ( 2953): onViewDetachedFromWindow(Landroid/support/v7/widget/RecyclerView$ViewHolder;)V W/art ( 2953): onViewRecycled(Landroid/support/v7/widget/RecyclerView$ViewHolder;)V W/art ( 2953): registerAdapterDataObserver(Landroid/support/v7/widget/RecyclerView$AdapterDataObserver;)V W/art ( 2953): setHasStableIds(Z)V W/art ( 2953): unregisterAdapterDataObserver(Landroid/support/v7/widget/RecyclerView$AdapterDataObserver;)V W/art ( 2953): Landroid/support/v7/widget/RecyclerView$Adapter; (Runtime): W/art ( 2953): Static fields: W/art ( 2953): Instance fields: W/art ( 2953): Z mHasStableIds W/art ( 2953): Landroid/support/v7/widget/RecyclerView$AdapterDataObservable; mObservable W/art ( 2953): Direct methods: W/art ( 2953): <init>()V W/art ( 2953): Virtual methods: W/art ( 2953): bindViewHolder(Landroid/support/v7/widget/RecyclerView$ViewHolder;I)V W/art ( 2953): createViewHolder(Landroid/view/ViewGroup;I)Landroid/support/v7/widget/RecyclerView$ViewHolder; W/art ( 2953): getItemCount()I W/art ( 2953): getItemId(I)J W/art ( 2953): getItemViewType(I)I W/art ( 2953): hasObservers()Z W/art ( 2953): hasStableIds()Z W/art ( 2953): notifyDataSetChanged()V W/art ( 2953): notifyItemChanged(I)V W/art ( 2953): notifyItemInserted(I)V W/art ( 2953): notifyItemMoved(II)V W/art ( 2953): notifyItemRangeChanged(II)V W/art ( 2953): notifyItemRangeInserted(II)V W/art ( 2953): notifyItemRangeRemoved(II)V W/art ( 2953): notifyItemRemoved(I)V W/art ( 2953): onAttachedToRecyclerView(Landroid/support/v7/widget/RecyclerView;)V W/art ( 2953): onBindViewHolder(Landroid/support/v7/widget/RecyclerView$ViewHolder;I)V W/art ( 2953): onCreateViewHolder(Landroid/view/ViewGroup;I)Landroid/support/v7/widget/RecyclerView$ViewHolder; W/art ( 2953): onDetachedFromRecyclerView(Landroid/support/v7/widget/RecyclerView;)V W/art ( 2953): onViewAttachedToWindow(Landroid/support/v7/widget/RecyclerView$ViewHolder;)V W/art ( 2953): onViewDetachedFromWindow(Landroid/support/v7/widget/RecyclerView$ViewHolder;)V W/art ( 2953): onViewRecycled(Landroid/support/v7/widget/RecyclerView$ViewHolder;)V W/art ( 2953): registerAdapterDataObserver(Landroid/support/v7/widget/RecyclerView$AdapterDataObserver;)V W/art ( 2953): setHasStableIds(Z)V W/art ( 2953): unregisterAdapterDataObserver(Landroid/support/v7/widget/RecyclerView$AdapterDataObserver;)V I/art ( 2953): Rejecting re-init on previously-failed class java.lang.Class<xxx.models.JSONArrayRecyclerViewAdapter> I/art ( 2953): Rejecting re-init on previously-failed class java.lang.Class<xxx.models.JSONArrayRecyclerViewAdapter> I/art ( 2953): Rejecting re-init on previously-failed class java.lang.Class<xxx.activities.DashboardActivity$1> I/art ( 2953): Rejecting re-init on previously-failed class java.lang.Class<xxx.activities.DashboardActivity$1> D/AndroidRuntime( 2953): Shutting down VM E/MonitoringInstrumentation( 2953): Exception encountered by: Thread[main,5,main]. Dumping thread state to outputs and pining for the fjords. E/MonitoringInstrumentation( 2953): java.lang.IncompatibleClassChangeError: xxx.activities.DashboardActivity$1 E/MonitoringInstrumentation( 2953): at dalvik.system.DexFile.defineClassNative(Native Method) E/MonitoringInstrumentation( 2953): at dalvik.system.DexFile.defineClass(DexFile.java:226) E/MonitoringInstrumentation( 2953): at dalvik.system.DexFile.loadClassBinaryName(DexFile.java:219) E/MonitoringInstrumentation( 2953): at dalvik.system.DexPathList.findClass(DexPathList.java:321) E/MonitoringInstrumentation( 2953): at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:54) E/MonitoringInstrumentation( 2953): at java.lang.ClassLoader.loadClass(ClassLoader.java:511) E/MonitoringInstrumentation( 2953): at java.lang.ClassLoader.loadClass(ClassLoader.java:469) E/MonitoringInstrumentation( 2953): at xxx.activities.DashboardActivity.onCreate(DashboardActivity.java:54) E/MonitoringInstrumentation( 2953): at android.app.Activity.performCreate(Activity.java:5990) E/MonitoringInstrumentation( 2953): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106) E/MonitoringInstrumentation( 2953): at android.support.test.runner.MonitoringInstrumentation.callActivityOnCreate(MonitoringInstrumentation.java:346) E/MonitoringInstrumentation( 2953): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278) E/MonitoringInstrumentation( 2953): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2390) E/MonitoringInstrumentation( 2953): at android.app.ActivityThread.access$800(ActivityThread.java:151) E/MonitoringInstrumentation( 2953): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) E/MonitoringInstrumentation( 2953): at android.os.Handler.dispatchMessage(Handler.java:102) E/MonitoringInstrumentation( 2953): at android.os.Looper.loop(Looper.java:135) E/MonitoringInstrumentation( 2953): at android.app.ActivityThread.main(ActivityThread.java:5257) E/MonitoringInstrumentation( 2953): at java.lang.reflect.Method.invoke(Native Method) E/MonitoringInstrumentation( 2953): at java.lang.reflect.Method.invoke(Method.java:372) E/MonitoringInstrumentation( 2953): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) E/MonitoringInstrumentation( 2953): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 

  • "Fehler beim Auflösen: com.android.support:support-v4:26.0.0" und andere ähnliche Fehler auf Gradle sync
  • Android Studio Gradle Projekt-Synchronisierung fehlgeschlagen
  • Android: Jumbo-Modus vs Multidex
  • JNI und Gradle im Android Studio
  • Gradle: FEHLER: konnte nicht feststellen, welche Aufgaben ausgeführt werden sollen
  • gradle, konnte nicht erweitern ZIP appcompat-v7: 19.0.1
  • Wie kann ich verschiedene Android App Symbole für verschiedene gradle buildTypes?
  • Probleme beim Starten von Fehlern in Android Studio, wenn packageDebug bei Max OS X
  • 4 Solutions collect form web for “Java.lang.IncompatibleClassChangeError bei der Aufnahme von Espresso-Beitrag: 2.0”

    Espresso-Abhängigkeit ist veraltet. Berichtet und wird in Zukunft fixiert. https://code.google.com/p/android-test-kit/issues/detail?id=139

    Bitte verwenden Sie das neueste Gradle Plugin (ist keine stabile Version)

    Beginnend mit 2.0.0 des Android-Gradle-Plugins, wird Gradle Build fehlschlagen, wenn die Haupt-APK und die Test-APK die gleiche Bibliothek (zB Guava) verwenden, aber in verschiedenen Versionen.

    Um den Build erfolgreich zu machen, füge einfach eine Abhängigkeit für die neuere Version zum build.gradle

    beispielsweise:

     androidTestCompile "com.android.support:recyclerview-v7:${supportLibVersion}" 

    Referenz:

    • Java.lang.IncompatibleClassChangeError bei der Verwendung von Espresso-Beitrag
    • Konflikte zwischen Haupt- und Test-APK lösen

    Sie können versuchen, das an der Unterseite Ihrer Gradle-Datei hinzuzufügen (nach jedem Char)

     /* Resolves dependency versions across test and production APKs, specifically, transitive dependencies. This is required since Espresso internally has a dependency on support-annotations. */ configurations.all { resolutionStrategy.force "com.android.support:support-annotations:$rootProject.supportLibraryVersion" } /* All direct/transitive dependencies shared between your test and production APKs need to be excluded from the test APK! This is necessary because both APKs will contain the same classes. Not excluding these dependencies from your test configuration will result in an dex pre-verifier error at runtime. More info in this tools bug: (https://code.google.com/p/android/issues/detail?id=192497) */ configurations.compile.dependencies.each { compileDependency -> println "Excluding compile dependency: ${compileDependency.getName()}" configurations.androidTestCompile.dependencies.each { androidTestCompileDependency -> configurations.androidTestCompile.exclude module: "${compileDependency.getName()}" } } 

    Es ist aus dem Android-Test-Projekt auf Github

    Quelle: https://github.com/googlecodelabs/android-testing/blob/master/app/build.gradle#L96

    Vielleicht hast du vergessen, testInstrumentationRunner android.support.test.runner.AndroidJUnitRunner "in einem defaultConfig {}

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.