Tôi có một lớp con của android.support.v7.widget.RecyclerView. Nó hoạt động tốt khi tôi sử dụng ứng dụng và thử nghiệm.java.lang.IncompatibleClassChangeError khi bao gồm espresso-contrib: 2,0
Tuy nhiên, khi tôi bao gồm espresso-contrib trong tập tin ứng dụng gradle của tôi, tôi nhận được một ngoại lệ khi tôi cố gắng để chạy các bài kiểm tra tương tự. Ứng dụng vẫn hoạt động. Cùng một vấn đề xảy ra trong cả hai phiên bản sdk 21 và 22, trên giả lập armv và thiết bị. Sử dụng một trình mô phỏng x86 nó thay thế.
Gradle
androidTestCompile 'com.android.support.test.espresso:espresso-contrib:2.0'
Exception
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)
logcat adb
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)
Có vẻ như' onFailedToRecycleView (Landroid/hỗ trợ/v7/widget/RecyclerView $ ViewHolder;) 'là sự khác biệt. tôi đoán là espresso-contrib đang cố gắng để thay thế một lớp hoặc giao diện nhưng không thực hiện tất cả các phương pháp? Tôi vẫn không biết cách sửa nó. – seppo0010