有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Android:无法合并dex多个dex文件定义Lorg/apache/commons/lang3

我目前正试图将this依赖项添加到我的安卓构建中,但收到以下错误:

org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':xxx:transformDexArchiveWithExternalLibsDexMergerForxxxDebug'.
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:100)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:70)
    at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:63)
    at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54)
    at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
    at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:88)
    at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:52)
    at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
    at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54)
    at 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)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:197)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:107)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:241)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:230)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.processTask(DefaultTaskPlanExecutor.java:124)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.access$200(DefaultTaskPlanExecutor.java:80)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:105)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:99)
    at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.execute(DefaultTaskExecutionPlan.java:625)
    at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.executeWithTask(DefaultTaskExecutionPlan.java:580)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.run(DefaultTaskPlanExecutor.java:99)
    at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
    at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
    at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
Caused by: java.lang.RuntimeException: java.lang.RuntimeException: java.lang.RuntimeException: com.安卓.builder.dexing.DexArchiveMergerException: Unable to merge dex
    at com.安卓.builder.dexing.DxDexArchiveMerger.mergeMonoDex(DxDexArchiveMerger.java:177)
    at com.安卓.builder.dexing.DxDexArchiveMerger.mergeDexArchives(DxDexArchiveMerger.java:118)
    at com.安卓.build.gradle.internal.transforms.DexMergerTransformCallable.call(DexMergerTransformCallable.java:97)
    at com.安卓.build.gradle.internal.transforms.ExternalLibsMergerTransform.transform(ExternalLibsMergerTransform.kt:121)
    at com.安卓.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:222)
    at com.安卓.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:218)
    at com.安卓.builder.profile.ThreadRecorder.record(ThreadRecorder.java:102)
    at com.安卓.build.gradle.internal.pipeline.TransformTask.transform(TransformTask.java:213)
    at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)
    at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$IncrementalTaskAction.doExecute(DefaultTaskClassInfoStore.java:173)
    at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$StandardTaskAction.execute(DefaultTaskClassInfoStore.java:134)
    at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$StandardTaskAction.execute(DefaultTaskClassInfoStore.java:121)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:122)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:197)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:107)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:111)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:92)
    ... 27 more
Caused by: java.lang.RuntimeException: java.lang.RuntimeException: com.安卓.builder.dexing.DexArchiveMergerException: Unable to merge dex
    at com.安卓.builder.dexing.DxDexArchiveMerger.lambda$mergeMonoDex$0(DxDexArchiveMerger.java:171)
Caused by: java.lang.RuntimeException: com.安卓.builder.dexing.DexArchiveMergerException: Unable to merge dex
Caused by: com.安卓.builder.dexing.DexArchiveMergerException: Unable to merge dex
    at com.安卓.builder.dexing.DexArchiveMergerCallable.call(DexArchiveMergerCallable.java:72)
    at com.安卓.builder.dexing.DexArchiveMergerCallable.call(DexArchiveMergerCallable.java:36)
Caused by: com.安卓.dex.DexException: Multiple dex files define Lorg/apache/commons/lang3/concurrent/AtomicInitializer;
    at com.安卓.dx.merge.DexMerger.readSortableTypes(DexMerger.java:661)
    at com.安卓.dx.merge.DexMerger.getSortedTypes(DexMerger.java:616)
    at com.安卓.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:598)
    at com.安卓.dx.merge.DexMerger.mergeDexes(DexMerger.java:171)
    at com.安卓.dx.merge.DexMerger.merge(DexMerger.java:198)
    at com.安卓.builder.dexing.DexArchiveMergerCallable.call(DexArchiveMergerCallable.java:61)

我的gradle当前看起来像这样:

dependencies {
    //other libraries
    compile ('com.github.pro100svitlo:creditCardNfcReader:1.0.3'){
        exclude group: 'org.apache.commons', module: 'commons-lang3'
    }
}

如果删除此导入或添加以下行,项目将正常生成:

configurations {
    all*.exclude group: 'org.apache.commons'
} 

然而,我的理解是,该行将从所有进口中排除该包,这不是我想要的

此外,Lorg/apache/commons/lang3/这一部分似乎在错误日志中随机更改。我正在清理和建设之间的每一个变化,此外,我已经尝试关闭和打开Android工作室多次

如何从该导入中排除重复的包。我做错了什么


共 (2) 个答案

  1. # 1 楼答案

    看起来该错误表明存在重复的依赖项

    如果你有facebook依赖关系,你应该添加下一行以排除重复条目:

    implementation('com.github.pro100svitlo:creditCardNfcReader:1.0.3') {
        exclude module: 'bolts-android';
        exclude group: 'com.parse.bolts', module: 'bolts-applinks';
        exclude group: 'com.parse.bolts', module: 'bolts-tasks';
    }
    

    如果没有帮助,你可以查看你的库的依赖项并检查重复项

  2. # 2 楼答案

    我在最新的gradle插件3.1中也遇到了同样的问题。x

    在我的情况下,为了修复它,我需要升级。将jar文件转换为更新版本,以修复索引问题

    试着在你的渐变中添加这一行。属性,它应该暂时解决这个问题

    android.useDexArchive=false