首页 > 解决方案 > 在任务 transformDexArchiveWithExternalLibsDexMergerForDebug 期间会发生什么?什么时候重复类会导致dex失败?

问题描述

在少数情况下,当我将重复的类(具有相同的 java 包名称)作为不同 jar 的一部分时,我会收到此错误

> Task :transformDexArchiveWithExternalLibsDexMergerForDebug FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':transformDexArchiveWithExternalLibsDexMergerForDebug'.
> java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: Unable to merge dex
* Try:
Run with --info or --debug option to get more log output. Run with --scan to get full insights.
* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':transformDexArchiveWithExternalLibsDexMergerForDebug'.
 at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:110)

但这并不总是发生。有时我会走这条艰难的路,有时不会。我想弄清楚这个问题以理解它并进一步避免它。

我什么时候能预料到这种失败?是否只有在类文件属于相同的 dex 时才这样?

编辑

Caused by: java.lang.RuntimeException: java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: Unable to merge dex
 at com.android.builder.dexing.DxDexArchiveMerger.mergeMultidex(DxDexArchiveMerger.java:266)
 at com.android.builder.dexing.DxDexArchiveMerger.mergeDexArchives(DxDexArchiveMerger.java:133)
 at com.android.build.gradle.internal.transforms.DexMergerTransformCallable.call(DexMergerTransformCallable.java:101)
 at com.android.build.gradle.internal.transforms.ExternalLibsMergerTransform.transform(ExternalLibsMergerTransform.kt:123)
 at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:221)
 at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:217)
 at com.android.builder.profile.ThreadRecorder.record(ThreadRecorder.java:102)
 at com.android.build.gradle.internal.pipeline.TransformTask.transform(TransformTask.java:212)
 at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)
 at org.gradle.api.internal.project.taskfactory.IncrementalTaskAction.doExecute(IncrementalTaskAction.java:50)
 at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:39)
 at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:26)
 at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:131)
 at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:301)
 at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:293)
 at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:175)
 at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:91)
 at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
 at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:120)
 at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:99)
 ... 31 more
Caused by: java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: Unable to merge dex
Caused by: com.android.builder.dexing.DexArchiveMergerException: Unable to merge dex
 at com.android.builder.dexing.DexArchiveMergerCallable.call(DexArchiveMergerCallable.java:72)
 at com.android.builder.dexing.DexArchiveMergerCallable.call(DexArchiveMergerCallable.java:36)
Caused by: com.android.dex.DexException: Multiple dex files define Lcom/learn/android/candycrush/Origamy$OrigamyCallback;
 at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:660)
 at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:615)
 at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:597)
 at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:170)
 at com.android.dx.merge.DexMerger.merge(DexMerger.java:197)
 at com.android.builder.dexing.DexArchiveMergerCallable.call(DexArchiveMergerCallable.java:61)

标签: androidgradledex

解决方案


推荐阅读