我认为27.1.0 v7支持库just released必须存在一个错误。更新项目以使用它后(从26.1.0开始),我不断收到此编译错误:


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

失败:生成失败,发生异常。


什么地方出了错:
任务':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.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:100)
在org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:70)
在org.gradle.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.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:97)
在org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:87)
在org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:52)处
在org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
在org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54)
在org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
在org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34)
在org.gradle.execution.taskgraph.DefaultTaskGraphExecuter $ EventFiringTaskWorker $ 1.run(DefaultTaskGraphExecuter.java:248)
在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.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)
在org.gradle.execution.taskgraph.DefaultTaskPlanExecutor $ TaskExecutorWorker $ 1.execute(DefaultTaskPlanExecutor.java:98)
在org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.execute(DefaultTaskExecutionPlan.java: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.recyclerview.extensions.ListAdapter
在com.android.builder.profile.Recorder $ Block.handleException(Recorder.java:55)
在com.android.builder.profile.ThreadRecorder.record(ThreadRecorder.java:104)
在com.android.build.gradle.internal.pipeline.TransformTask.transform(TransformTask.java:213)
在org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)
在org.gradle.api.internal.project.taskfactory.IncrementalTask​​Action.doExecute(IncrementalTask​​Action.java:46)
在org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:39)
在org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:26)
在org.gradle.api.internal.tasks.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.executeAction(ExecuteActionsTaskExecuter.java:110)处
在org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:92)
...另外29个
引起原因:com.android.build.api.transform.TransformException:com.android.tools.r8.errors.CompilationError:程序类型已存在:android.support.v7.recyclerview.extensions.ListAdapter
在com.android.build.gradle.internal.transforms.DexMergerTransform.transform(DexMergerTransform.java:230)
在com.android.build.gradle.internal.pipeline.TransformTask $ 2.call(TransformTask.java:222)
在com.android.build.gradle.internal.pipeline.TransformTask $ 2.call(TransformTask.java:218)
在com.android.builder.profile.ThreadRecorder.record(ThreadRecorder.java:102)
...另外41个
引起原因:com.android.tools.r8.errors.CompilationError:程序类型已存在:android.support.v7.recyclerview.extensions.ListAdapter
在com.android.tools.r8.utils.ProgramClassCollection.resolveClassConflictImpl(ProgramClassCollection.java:61)
在com.android.tools.r8.utils.ProgramClassCollection.lambda $ create $ 0(ProgramClassCollection.java:22)
在com.android.tools.r8.utils.ProgramClassCollection.create(ProgramClassCollection.java:22)
在com.android.tools.r8.graph.DexApplication $ Builder.build(DexApplication.java:408)
在com.android.tools.r8.dex.ApplicationReader.read(ApplicationReader.java:96)
在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)
在com.android.build.gradle.internal.transforms.DexMergerTransformCallable.call(DexMergerTransformCallable.java:97)
在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"


我也用

configurations.all {
    resolutionStrategy {
        ...
        force "com.android.support:recyclerview-v7:27.1.0"
    }
}


我曾尝试清洁/重建。我尝试使缓存无效并重新启动。我也尝试过手动删除所有构建文件夹和.gradle文件夹。我也曾尝试禁用D8,但后来我的构建永久挂起。问题仍然存在。我什至不使用ListAdapter

最佳答案

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

编辑由于某种原因,这个问题引起了很多关注!因此,我以为我会将此评论添加为“教人钓鱼”的时刻。问题:我如何弄清楚我的ListAdapter来自哪里?答案?如果您使用的是Android Studio / IntelliJ IDEA,请按ctrl + n开始搜索类名。您会看到以下对话框:

android - Android:v7支持lib 27.1.0“程序类型已存在”时出现编译错误android.support.v7.recyclerview.extensions.ListAdapter-LMLPHP

请注意复选框!如果未选中该选项,则将永远找不到库包含的类。选中它,它将显示项目中每个班级的出处。

08-04 05:01