У меня есть подкласс android.support.v7.widget.RecyclerView. Он отлично работает, когда я использую приложение и тестирование.
Однако, когда я включаю espresso-contrib в мой файл приложения gradle, я получаю исключение, когда я пытаюсь запустить те же тесты. Приложение все еще работает. Такая же проблема возникает и в версиях 21 и 22 sdk, и в эмуляторе и устройстве armv. Используя эмулятор x86, он вместо этого отключается.
Gradle
androidTestCompile 'com.android.support.test.espresso:espresso-contrib:2.0'
Исключение
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: [email protected] 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/[email protected]@[email protected]
[email protected] at compile time, /data/dalvik-cache/x86/[email protected]@[email protected]@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)