Android:v7的编译错误支持lib 27.1.0"程序类型已存在"android.support.v7.recyclerview.extensions.ListAdapter

Aut*_*pps 11 android listadapter dex android-support-library android-recyclerview

我认为必须存在27.1.0 v7支持lib的错误,刚刚发布.更新我的项目以使用它(从26.1.0)后,我不断收到此编译错误:

任务:app:transformDexArchiveWithDexMergerForRegularDebug FAILED D8用于合并dex.程序类型已存在:android.support.v7.recyclerview.extensions.ListAdapter

FAILURE:构建因异常而失败.

  • 出了什么问题:任务执行失败':app:transformDexArchiveWithDexMergerForRegularDebug'.com.android.build.api.transform.TransformException:com.android.tools.r8.errors.CompilationError:程序类型已存在:android.support.v7.recyclerview.extensions.ListAdapter

  • 尝试:使用--info或--debug选项运行以获取更多日志输出.

  • 例外情况是:org.gradle.api.tasks.TaskExecutionException:任务':app:transformDexArchiveWithDexMergerForRegularDebug'的执行失败.在org.gradle上的org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:100)org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:70) .api.internal.tasks.execution.OutputDirectoryCreatingTaskExecuter.execute(OutputDirectoryCreatingTaskExecuter.java:51)在org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:62)在org.gradle.api.internal .tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54)在org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:60)在org.gradle.api.internal.tasks.execution org.gradle.api.internal.tasks.execu上的.skipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:97)org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:87)在org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter的org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)中的.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:52).执行(SkipOnlyIfTaskExecuter.java:54)org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter. java:34)at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter $ EventFiringTaskWorker $ 1.run(DefaultTaskGraphExecuter.java:248)org.gradle.internal.progress.DefaultBuildOperationExecutor $ RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)at org. gradle.internal.progress.DefaultBuildOperationExecutor $ RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)org.gradle.internal.progress.DefaultBuild 在Org.gradle.internal.progress.DefaultBupeOperationExecutor.run上的OperationExecutor.execute(DefaultBuildOperationExecutor.java:199)org.gradle.execution.taskgraph.DefaultTaskGraphExecuter $ EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:241)在org.gradle.execution.taskgraph.DefaultTaskGraphExecuter $ EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:230)在org.gradle.execution.taskgraph.DefaultTaskPlanExecutor $ TaskExecutorWorker.processTask(DefaultTaskPlanExecutor.java:123)在org.gradle.execution.taskgraph .DefaultTaskPlanExecutor $ TaskExecutorWorker.access $ 200(DefaultTaskPlanExecutor.java:79)org.gradle.execution.taskgraph.DefaultTaskPlanExecutor $ TaskExecutorWorker $ 1.execute(DefaultTaskPlanExecutor.java:104)at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor $ TaskExecutorWorker $ 1.执行(DefaultTaskPlanExecutor.java:98)org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.execute(DefaultTaskExecutionPlan.jav)一:626)在org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.executeWithTask(DefaultTaskExecutionPlan.java:581)在org.gradle.execution.taskgraph.DefaultTaskPlanExecutor $ TaskExecutorWorker.run(DefaultTaskPlanExecutor.java:98)在org.gradle.internal .concurrent.ExecutorPolicy $ CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)在org.gradle.internal.concurrent.ManagedExecutorImpl $ 1.run(ManagedExecutorImpl.java:46)在org.gradle.internal.concurrent.ThreadFactoryImpl $ ManagedThreadRunnable.run( ThreadFactoryImpl.java:55)引起:java.lang.RuntimeException:com.android.build.api.transform.TransformException:com.android.tools.r8.errors.CompilationError:程序类型已存在:android.support.v7.在com.android中的com.android.builder.profile.Recorder $ Block.handleException(Recorder.java:55)上的recyclerview.extensions.ListAdapter位于com.android的com.android.builder.profile.ThreadRecorder.record(ThreadRecorder.java:104). build.gradle.internal.pipeline.TransformTask.transform(TransformTask.java:213)在org.gradle.api上的org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)org.gradle.api.internal.project.taskfactory.IncrementalTask​​Action.doExecute(IncrementalTask​​Action.java:46) .internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:39)位于org.gradle.api.internal.tasks的org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:26) .execution.ExecuteActionsTaskExecuter $ 1.run(ExecuteActionsTaskExecuter.java:121)org.gradle.internal.progress.DefaultBuildOperationExecutor $ RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)org.gradle.internal.progress.DefaultBuildOperationExecutor $ RunnableBuildOperationWorker.execute( DefaultBuildOperationExecutor.java:328)在org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:199)在org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:110)处或 org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:92)中的g.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:110)... 29更多引起:com.android.build.api.transform.TransformException:com.android.tools.r8.errors.CompilationError:程序类型已存在:com.sandand.build中的android.support.v7.recyclerview.extensions.ListAdapter. com.android.build.gradle.internal的com.android.build.gradle.internal.pipeline.TransformTask $ 2.call(TransformTask.java:222)中的gradle.internal.transforms.DexMergerTransform.transform(DexMergerTransform.java:230) .pipeline.TransformTask $ 2.call(TransformTask.java:218)at com.android.builder.profile.ThreadRecorder.record(ThreadRecorder.java:102)... 41更多引起:com.android.tools.r8.errors .CompilationError:程序类型已存在:com.android.tools.r8.utils.Program中的android.support.v7.recyclerview.extensions.ListAdapter Com.android.tools.r8.utils.ProgramClassCollection.lambda上的ClassCollection.resolveClassConflictImpl(ProgramClassCollection.java:61)$ com.android.tools.r8.utils.ProgramClassCollection.create(ProgramClassCollection)创建$ 0(ProgramClassCollection.java:22) .java:22)在com.android.tools.r8.graph.DexApplication $ Builder.build(DexApplication.java:408)的com.android.tools.r8.dex.ApplicationReader.read(ApplicationReader.java:96)at com.android.tools.r8.D8.runForTesting(D8.java:179)com.android.tools.r8.D8.runForTesting(D8.java:152)com.android.tools.r8.D8.run( D8.java:71)com.android.builder.dexing.D8DexArchiveMerger.mergeDexArchives(D8DexArchiveMerger.java:73)at com.android.build.gradle.internal.transforms.DexMergerTransformCallable.call(DexMergerTransformCallable.java:97)at com .android.build.gradle.internal.transforms.DexMergerTransformCallable.call(DexMergerTransformCallable.java:35)

我查看了我的项目的依赖项(./gradlew :<module>:dependencies[ <module>我的所有模块都在哪里])并验证我只有一个依赖项应该支持ListAdapter类,它就是这个:

implementation "com.android.support:recyclerview-v7:27.1.0"
Run Code Online (Sandbox Code Playgroud)

我也用

configurations.all {
    resolutionStrategy {
        ...
        force "com.android.support:recyclerview-v7:27.1.0"
    }
}
Run Code Online (Sandbox Code Playgroud)

我尝试过清洁/重建.我已经尝试使缓存无效并重新启动.我还尝试手动删除所有构建文件夹和.gradle文件夹.我也试过禁用D8,但是我的构建只是永远挂起.问题依然存在.我甚至没有使用 ListAdapter!

Aut*_*pps 30

弄清楚了!原来android.arch.paging:runtime-1.0.0-alpha4-1依赖ListAdapter声明.将分页库更新为alpha6后,问题得以解决.

编辑由于某种原因,这个问题得到了很多关注!所以,我想我会把这个评论添加为"教人钓鱼"的那一刻.问题是:我怎么弄清楚我ListAdapter的来自哪里?答案?如果您使用的是Android Studio/IntelliJ IDEA,请按ctrl+ n开始搜索类名.你会看到这个对话框:

在此输入图像描述

请注意复选框!如果您没有选中,则永远不会找到库中包含的类.通过检查,它将显示项目中每个类的出处.