代码之家  ›  专栏  ›  技术社区  ›  AutonomousApps

Android:v7 support lib 27.1.0“程序类型已存在”Android出现编译错误。支持v7.recyclerview。扩展。列表适配器

  •  11
  • AutonomousApps  · 技术社区  · 6 年前

    我认为27.1.0 v7支持库肯定有一个bug, just released . 在更新我的项目以使用它(从26.1.0开始)之后,我不断遇到以下编译错误:

    任务:应用程序:transformDexArchiveWithDexMergerForRegularDebug失败 D8用于合并索引。 程序类型已存在:android。支持v7.recyclerview。扩展。列表适配器

    失败:生成失败,出现异常。

    • 出了什么问题: 任务“:app:transformDexArchiveWithDexMergerForRegularDebug”的执行失败。 通用域名格式。安卓建筑应用程序编程接口。使改变TransformException:com。安卓工具。r8.错误。编译错误:程序类型已存在:android。支持v7.recyclerview。扩展。列表适配器

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

    • 例外情况是: 组织。格拉德尔。应用程序编程接口。任务。TaskExecutionException:任务执行失败:应用程序:transformDexArchiveWithDexMergerForRegularDebug”。 位于组织。格拉德尔。应用程序编程接口。内部的任务。处决ExecuteActionsTaskExecuter。executeActions(ExecuteActionsTaskExecuter.java:100) 位于组织。格拉德尔。应用程序编程接口。内部的任务。处决ExecuteActionsTaskExecuter。execute(ExecuteActionsTaskExecuter.java:70) 位于组织。格拉德尔。应用程序编程接口。内部的任务。处决OutputDirectoryCreatingTaskExecuter。execute(OutputDirectoryCreatingTaskExecuter.java:51) 位于组织。格拉德尔。应用程序编程接口。内部的任务。处决SkipUpToDateTaskExecuter。执行(skippuptodatetaskexecuter.java:62) 位于组织。格拉德尔。应用程序编程接口。内部的任务。处决ResolveTaskOutputCachingStateExecuter。执行(ResolveTaskOutputCachingStateExecuter.java:54) 位于组织。格拉德尔。应用程序编程接口。内部的任务。处决验证TaskExecuter。执行(ValidatingTaskExecuter.java:60) 位于组织。格拉德尔。应用程序编程接口。内部的任务。处决Skipemptysourcefilestataskexecuter。执行(SkipEmptySourceFilesTaskExecuter.java:97) 位于组织。格拉德尔。应用程序编程接口。内部的任务。处决清理StaleOutputsecuter。执行(cleanupstaleoutputsecuter.java:87) 位于组织。格拉德尔。应用程序编程接口。内部的任务。处决ResolveTaskArtifactStateTaskExecuter。执行(ResolveTaskArtifactStateTaskExecuter.java:52) 位于组织。格拉德尔。应用程序编程接口。内部的任务。处决SkipTask无动作检测器。执行(SkipTaskWithNoActionsExecuter.java:52) 位于组织。格拉德尔。应用程序编程接口。内部的任务。处决熟练掌握Iftaskexecuter。执行(SkipOnlyIfTaskExecuter.java:54) 位于组织。格拉德尔。应用程序编程接口。内部的任务。处决ExecuteAtMostOnceTaskExecuter。execute(ExecuteAtMostOnceTaskExecuter.java:43) 位于组织。格拉德尔。应用程序编程接口。内部的任务。处决CatchExceptionTaskExecuter。执行(CatchExceptionTaskExecuter.java:34) 位于组织。格拉德尔。处决任务图。DefaultTaskGrapherExecuter$EventFiringTaskWorker$1。运行(DefaultTaskGraphExecuter.java:248) 位于组织。格拉德尔。内部的进步DefaultBuildOperationExecutor$RunnableBuildOperationWorker。执行(DefaultBuildOperationExecutor.java:336) 位于组织。格拉德尔。内部的进步DefaultBuildOperationExecutor$RunnableBuildOperationWorker。执行(DefaultBuildOperationExecutor.java:328) 位于组织。格拉德尔。内部的进步DefaultBuildOperationExecutor。执行(DefaultBuildOperationExecutor.java:199) 位于组织。格拉德尔。内部的进步DefaultBuildOperationExecutor。运行(DefaultBuildOperationExecutor.java:110) 位于组织。格拉德尔。处决任务图。DefaultTaskGrapherExecuter$EventFiringTaskWorker。执行(DefaultTaskGraphExecuter.java:241) 位于组织。格拉德尔。处决任务图。DefaultTaskGrapherExecuter$EventFiringTaskWorker。执行(DefaultTaskGraphExecuter.java:230) 位于组织。格拉德尔。处决任务图。DefaultTaskPlanExecutor$TaskExecutorWorker。processTask(DefaultTaskPlanExecutor.java:123) 位于组织。格拉德尔。处决任务图。DefaultTaskPlanExecutor$TaskExecutorWorker。access$200(DefaultTaskPlanExecutor.java:79) 位于组织。格拉德尔。处决任务图。DefaultTaskPlanExecutor$TaskExecutorWorker$1。执行(DefaultTaskPlanExecutor.java:104) 位于组织。格拉德尔。处决任务图。DefaultTaskPlanExecutor$TaskExecutorWorker$1。执行(DefaultTaskPlanExecutor.java:98) 位于组织。格拉德尔。处决任务图。DefaultTaskExecutionPlan。执行(DefaultTaskExecutionPlan.java:626) 位于组织。格拉德尔。处决任务图。DefaultTaskExecutionPlan。executeWithTask(DefaultTaskExecutionPlan.java:581) 位于组织。格拉德尔。处决任务图。DefaultTaskPlanExecutor$TaskExecutorWorker。运行(DefaultTaskPlanExecutor.java:98) 位于组织。格拉德尔。内部的同时发生的ExecutorPolicy$CatchAndRecordFailures。onExecute(ExecutorPolicy.java:63) 位于组织。格拉德尔。内部的同时发生的ManagedExecutionImpl 1美元。运行(ManagedExecutorImpl.java:46) 位于组织。格拉德尔。内部的同时发生的ThreadFactoryImpl$ManagedThreadRunnable。运行(ThreadFactoryImpl.java:55) 原因:java。lang.RuntimeException:com。安卓建筑应用程序编程接口。使改变TransformException:com。安卓工具。r8.错误。编译错误:程序类型已存在:android。支持v7.recyclerview。扩展。列表适配器 在com。安卓建设者轮廓记录器$块。handleException(Recorder.java:55) 在com。安卓建设者轮廓螺纹记录器。记录(ThreadRecorder.java:104) 在com。安卓建筑格拉德尔。内部的管道TransformTask。transform(TransformTask.java:213) 位于组织。格拉德尔。内部的反映JavaMethod。调用(JavaMethod.java:73) 位于组织。格拉德尔。应用程序编程接口。内部的项目taskfactory。增量AltaskAction。doExecute(IncrementalTaskAction.java:46) 位于组织。格拉德尔。应用程序编程接口。内部的项目taskfactory。标准任务操作。执行(StandardTaskAction.java:39) 位于组织。格拉德尔。应用程序编程接口。内部的项目taskfactory。标准任务操作。执行(StandardTaskAction.java:26) 位于组织。格拉德尔。应用程序编程接口。内部的任务。处决ExecuteActionsTaskExecuter$1。运行(ExecuteActionsTaskExecuter.java:121) 位于组织。格拉德尔。内部的进步DefaultBuildOperationExecutor$RunnableBuildOperationWorker。执行(DefaultBuildOperationExecutor.java:336) 位于组织。格拉德尔。内部的进步DefaultBuildOperationExecutor$RunnableBuildOperationWorker。执行(DefaultBuildOperationExecutor.java:328) 位于组织。格拉德尔。内部的进步DefaultBuildOperationExecutor。执行(DefaultBuildOperationExecutor.java:199) 位于组织。格拉德尔。内部的进步DefaultBuildOperationExecutor。运行(DefaultBuildOperationExecutor.java:110) 位于组织。格拉德尔。应用程序编程接口。内部的任务。处决ExecuteActionsTaskExecuter。executeAction(ExecuteActionsTaskExecuter.java:110) 位于组织。格拉德尔。应用程序编程接口。内部的任务。处决ExecuteActionsTaskExecuter。executeActions(ExecuteActionsTaskExecuter.java:92) ... 29个以上 原因:com。安卓建筑应用程序编程接口。使改变TransformException:com。安卓工具。r8.错误。编译错误:程序类型已存在:android。支持v7.recyclerview。扩展。列表适配器 在com。安卓建筑格拉德尔。内部的变换。DexmmergerTransform。转换(DexMergerTransform.java:230) 在com。安卓建筑格拉德尔。内部的管道TransformTask 2美元。调用(TransformTask.java:222) 在com。安卓建筑格拉德尔。内部的管道TransformTask 2美元。调用(TransformTask.java:218) 在com。安卓建设者轮廓螺纹记录器。记录(ThreadRecorder.java:102) ... 41个以上 原因:com。安卓工具。r8.错误。编译错误:程序类型已存在:android。支持v7.recyclerview。扩展。列表适配器 在com。安卓工具。r8.utils。ProgramClassCollection。resolveClassConflictImpl(ProgramClassCollection.java:61) 在com。安卓工具。r8.utils。ProgramClassCollection。lambda$create$0(ProgramClassCollection.java:22) 在com。安卓工具。r8.utils。ProgramClassCollection。创建(ProgramClassCollection.java:22) 在com。安卓工具。r8.图表。DexApplication$生成器。构建(DexApplication.java:408) 在com。安卓工具。r8.dex。ApplicationReader。阅读(ApplicationReader.java:96) 在com。安卓工具。r8.D8。runForTesting(D8.java:179) 在com。安卓工具。r8.D8。runForTesting(D8.java:152) 在com。安卓工具。r8.D8。运行(D8.java:71) 在com。安卓建设者德兴。D8DEX存档合并。mergeDexArchives(D8DexArchiveMerge.java:73) 在com。安卓建筑格拉德尔。内部的变换。DEXMERGERTTRANSFORMCALLABLE可调用。调用(DexMergerTransformCallable.java:97) 在com。安卓建筑格拉德尔。内部的变换。DEXMERGERTTRANSFORMCALLABLE可调用。调用(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 !

    2 回复  |  直到 6 年前
        1
  •  30
  •   AutonomousApps    6 年前

    算了吧!结果发现 安卓拱分页:runtime-1.0.0-alpha4-1 附属国 而且 ListAdapter 宣布。将分页库更新为之后 alpha6 ,问题已解决。

    编辑 出于某种原因,这个问题受到了很多关注!所以,我想我应该把这句话添加为“教人钓鱼”之类的时刻。问题是:我怎么知道我的 列表适配器 是从哪里来的?答案是什么?如果您使用的是Android Studio/IntelliJ IDEA,请点击 ctrl键 + n 开始搜索类名。您将看到以下对话框:

    enter image description here

    请注意复选框!如果你没有检查,你会的 从不 查找库中包含的类。选中后,它将显示项目中每个类的出处。

        2
  •  0
  •   daniekpo    6 年前

    简单地更新我所有的依赖项,清理和重建项目就可以帮到我。我认为存在某种依赖关系/库冲突。当您尝试在其他地方使用新版本时,过时的库可能正在尝试使用旧版本的支持库。