Android java.lang.CompatibleClassChangeError(包括espresso contrib时):2.0

Android java.lang.CompatibleClassChangeError(包括espresso contrib时):2.0,android,gradle,android-espresso,Android,Gradle,Android Espresso,我有一个子类android.support.v7.widget.RecyclerView。当我使用应用程序和测试时,它工作得很好 但是,当我在gradle应用程序文件中包含espresso contrib时,当我尝试运行相同的测试时,会出现异常。该应用程序仍然有效。在armv emulator和设备上的sdk版本21和22中都会出现相同的问题。使用x86仿真器,它会自动识别故障 格拉德尔 androidTestCompile 'com.android.support.test.espresso:

我有一个子类android.support.v7.widget.RecyclerView。当我使用应用程序和测试时,它工作得很好

但是,当我在gradle应用程序文件中包含espresso contrib时,当我尝试运行相同的测试时,会出现异常。该应用程序仍然有效。在armv emulator和设备上的sdk版本21和22中都会出现相同的问题。使用x86仿真器,它会自动识别故障

格拉德尔

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)
亚洲开发银行日志

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)
I/ActivityManager(1229):从显示器0上的uid 10059启动u0{act=android.intent.action.MAIN flg=0x14000000 cmp=xxx/.activities.DashboardActivity}
V/WindowManager(1229):添加AppToken:AppWindowToken{65964e3 token=token{3f63d512 ActivityRecord{19743c9d u0 xxx/.activities.DashboardActivity t13}}}到堆栈=1任务=13在0
D/LifecycleMonitor(2953):生命周期状态更改:xxx.activities。DashboardActivity@281384efin:在创建时预先设置
V/WindowManager(1229):在7个窗口中的第2个添加窗口{2d974c1a u0 start xxx}(在窗口{27a98488 u0 com.android.launcher/com.android.launcher.launcher}之后)
W/RecyclerView(2953):setScrollingTouchlop():错误参数常量315513600;使用默认值
W/art(2953):检测到不兼容的结构更改:android.support.v7.widget.RecyclerView$适配器的结构更改是危险的(/data/dalvik cache/x86/data@app@xxx-1@b
ase。apk@classes.dex在编译时,/data/dalvik cache/x86/data@app@xxx.测试-1@base.apk@classes.dex在运行时):虚拟方法计数:26对25
W/art(2953):Landroid/support/v7/widget/RecyclerView$适配器;(编译时):
W/art(2953):静态字段:
W/art(2953):实例字段:
W/art(2953):Z mHasStableIds
W/art(2953):Landroid/support/v7/widget/RecyclerView$AdapterDataObservable;可移动
W/art(2953):直接方法:
W/art(2953):()V
W/art(2953):虚拟方法:
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):Hasz
W/art(2953):hasStableIds()Z
W/art(2953):notifyDataSetChanged()V
W/art(2953):第(I)款
W/art(2953):第(I)条第五款
W/art(2953):第(二)款第五项
W/art(2953):第(二)款
W/art(2953):插入(II)V
W/art(2953):第(二)款第五项
W/art(2953):第(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):从RecyclerView(Landroid/support/v7/widget/RecyclerView;)上连接
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):设置表格ID(Z)V
W/art(2953):未注册AdapterDataObserver(Landroid/support/v7/widget/RecyclerView$AdapterDataObserver;)V
W/art(2953):Landroid/support/v7/widget/RecyclerView$适配器;(运行时):
W/art(2953):静态字段:
W/art(2953):实例字段:
W/art(2953):Z mHasStableIds
W/art(2953):Landroid/support/v7/widget/RecyclerView$AdapterDataObservable;可移动
W/art(2953):直接方法:
W/art(2953):()V
W/art(2953):虚拟方法:
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):Hasz
W/art(2953):hasStableIds()Z
W/art(2953):notifyDataSetChanged()V
W/art(2953):第(I)款
W/art(2953):第(I)条第五款
W/art(2953):第(二)款第五项
W/art(2953):第(二)款
W/art(2953):插入(II)V
W/art(2953):第(二)款第五项
W/art(2953):第(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):从RecyclerView(Landroid/support/v7/widget/RecyclerView;)上连接
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):设置表格ID(Z)V
W/art(2953):未注册AdapterDataObserver(Landroid/support/v7/widget/RecyclerView$AdapterDataObserver;)V
I/art(2953):拒绝对以前失败的类java.lang.class重新初始化
I/art(2953):拒绝对以前失败的类java.lang.class重新初始化
I/艺术(
androidTestCompile "com.android.support:recyclerview-v7:${supportLibVersion}"
/*
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()}"
    }
}