Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Java.lang.IncompatibleClassChangeError al incluir espresso-contrib: 2.0

Tengo una subclase de android.support.v7.widget.RecyclerView. Funciona bien cuando uso la aplicación y las pruebas.

Sin embargo, cuando incluyo espresso-contrib en mi archivo de aplicación de gradle, recibo una excepción cuando intento ejecutar las mismas pruebas. La aplicación sigue funcionando. El mismo problema ocurre en ambas versiones 21 y 22 de sdk, en el emulador armv y el dispositivo. Utilizando un emulador x86, se segmenta en su lugar.

  • Matanzas de Kitkat: No se permite cargar un recurso local: file: ///android_asset/webkit/android-weberror.png
  • Android, Cómo hacer una barra de estado transparente correctamente
  • Android push mensaje sin gcm es posible?
  • Uso de la configuración regional para detectar si utiliza unidades imperiales
  • Crear android forma de fondo de forma programática
  • Get String de EditText
  • Gradle

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

    Excepción

     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) 

  • MVP Android - ¿Dónde guardar el estado de vista?
  • ¿Diferencia entre Wakelock y FLAG_KEEP_SCREEN_ON?
  • START_STICKY y START_NOT_STICKY
  • Estilo conjunto de Android en el código
  • Cómo agregar una columna booleana en Android SQlite
  • Android: Creación de preferencias personalizadas
  • 4 Solutions collect form web for “Java.lang.IncompatibleClassChangeError al incluir espresso-contrib: 2.0”

    La dependencia de la Espresso está desactualizada. Informó y se fijará en el futuro. https://code.google.com/p/android-test-kit/issues/detail?id=139

    Utilice por favor el Plugin más nuevo de Gradle (no es una versión estable)

    Comenzando con 2.0.0 del Plugin Gradle de Android, la compilación de Gradle fallará si el APK principal y el APK de prueba utilizan la misma biblioteca (por ejemplo, Guayaba) pero en versiones diferentes.

    Para que la compilación tenga éxito, simplemente añada una dependencia para la versión más reciente a la build.gradle

    por ejemplo:

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

    referencia:

    • Java.lang.IncompatibleClassChangeError cuando se utiliza espresso-contrib
    • Resolver conflictos entre el APK principal y de prueba

    Puede intentar agregar que en la parte inferior de su archivo gradle (después de cada 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 del proyecto de prueba de Android en github

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

    Tal vez se le olvidó agregar testInstrumentationRunner android.support.test.runner.AndroidJUnitRunner "en un defaultConfig {}

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.