无法合并dex Android studio 3.0

问题描述:

我的项目存在一些问题。在Android的工作室2.3.3它工作正常,但当我更新到3.0我有问题,以marge DEX。无法合并dex Android studio 3.0

我清理并重建项目。

什么是错的:

执行失败的任务 ':应用程序:transformDexArchiveWithExternalLibsDexMergerForDebug'。 com.android.builder.dexing.DexArchiveMergerException:无法合并DEX

堆栈跟踪:

org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:transformDexArchiveWithExternalLibsDexMergerForDebug'. 
at  org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeA ctions(ExecuteActionsTaskExecuter.java:100) 
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute( ExecuteActionsTaskExecuter.java:70) 
at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(Sk ipUpToDateTaskExecuter.java:63) 
at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecut er.execute(ResolveTaskOutputCachingStateExecuter.java:54) 
at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(Vali datingTaskExecuter.java:58) 
at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.ex ecute(SkipEmptySourceFilesTaskExecuter.java:88) 
at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:52) 
at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execu te(SkipTaskWithNoActionsExecuter.java:52) 
at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(Skip OnlyIfTaskExecuter.java:54) 
at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execu te(ExecuteAtMostOnceTaskExecuter.java:43) 
at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute( CatchExceptionTaskExecuter.java:34) 
at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWork er$1.run(DefaultTaskGraphExecuter.java:248) 
at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOpe rationWorker.execute(DefaultBuildOperationExecutor.java:336) 
at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOpe rationWorker.execute(DefaultBuildOperationExecutor.java:328) 
at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultB uildOperationExecutor.java:197) 
at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuild OperationExecutor.java:107) 
at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWork er.execute(DefaultTaskGraphExecuter.java:241) 
at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWork er.execute(DefaultTaskGraphExecuter.java:230) 
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.p rocessTask(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(DefaultTask ExecutionPlan.java:625) 
at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.executeWithTask(Def aultTaskExecutionPlan.java:580) 
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.r un(DefaultTaskPlanExecutor.java:99) 
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExec ute(ExecutorPolicy.java:63) 
at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImp l.java:46) 
at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run( ThreadFactoryImpl.java:55) 
Caused by: java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: Unable to merge dex 
at com.android.builder.dexing.DxDexArchiveMerger.mergeMultidex(DxDexArchiveMer ger.java:266) 
at com.android.builder.dexing.DxDexArchiveMerger.mergeDexArchives(DxDexArchive Merger.java:133) 
at com.android.build.gradle.internal.transforms.DexMergerTransformCallable.cal l(DexMergerTransformCallable.java:97) 
at com.android.build.gradle.internal.transforms.ExternalLibsMergerTransform.tr ansform(ExternalLibsMergerTransform.kt:121) 
at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTa sk.java:222) 
at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTa sk.java:218) 
at com.android.builder.profile.ThreadRecorder.record(ThreadRecorder.java:102) 
at com.android.build.gradle.internal.pipeline.TransformTask.transform(Transfor mTask.java:213) 
at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73) 
at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$Incre mentalTaskAction.doExecute(DefaultTaskClassInfoStore.java:173) 
at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$Stand ardTaskAction.execute(DefaultTaskClassInfoStore.java:134) 
at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$Stand ardTaskAction.execute(DefaultTaskClassInfoStore.java:121) 
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(Ex ecuteActionsTaskExecuter.java:122) 
at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOpe rationWorker.execute(DefaultBuildOperationExecutor.java:336) 
at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOpe rationWorker.execute(DefaultBuildOperationExecutor.java:328) 
at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultB uildOperationExecutor.java:197) 
at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuild OperationExecutor.java:107) 
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeA ction(ExecuteActionsTaskExecuter.java:111) 
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeA ctions(ExecuteActionsTaskExecuter.java:92) 
... 27 more 
Caused by: com.android.builder.dexing.DexArchiveMergerException: Unable  to merge dex 
at com.android.builder.dexing.DexArchiveMergerCallable.call(DexArchiveMergerCa llable.java:72) 
at com.android.builder.dexing.DexArchiveMergerCallable.call(DexArchiveMergerCa llable.java:36) 
... 46 more 
Caused by: com.android.dex.DexException: Multiple dex files define  Landroid/support/v4/view/accessibility/AccessibilityRecordCompatIcsMr1; 
at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:661) 
at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:616) 
at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:598) 
at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:171) 
at com.android.dx.merge.DexMerger.merge(DexMerger.java:198) 
at com.android.builder.dexing.DexArchiveMergerCallable.call(DexArchiveMergerCa llable.java:61) 
... 47 more 

的build.gradle

apply plugin: 'com.android.application' 

android { 
compileSdkVersion 21 
buildToolsVersion '26.0.2' 

defaultConfig { 
    applicationId "...." 
    minSdkVersion 21 
    targetSdkVersion 21 
    versionCode 2 
    multiDexEnabled true 
    versionName "1.01" 
} 
buildTypes { 
    release { 
     minifyEnabled false 
     proguardFiles getDefaultProguardFile('proguard-android.txt'),  'proguard-rules.pro' 
    } 
} 
} 
repositories { 
mavenCentral() 

maven { url 'http://maven.livotovlabs.pro/content/groups/public' } 
} 
dependencies { 
compile fileTree(dir: 'libs', include: ['*.jar']) 
compile 'com.android.support:appcompat-v7:21.0.3' 
compile 'com.android.support:cardview-v7:21.0.3' 
compile 'com.android.support:multidex:1.0.1' //1.0.1 
compile 'com.google.android.gms:play-services:6.5.87' //6.5.87 
compile fileTree(dir: 'libs', include: 'Parse-*.jar') 
compile 'com.parse.bolts:bolts-tasks:1.4.0' 
compile 'com.parse.bolts:bolts-applinks:1.4.0' 
compile 'com.jakewharton:butterknife:8.8.0' 
compile 'it.neokree:MaterialNavigationDrawer:1.3.3' 
compile 'com.github.navasmdc:MaterialDesign:[email protected]' 
compile 'com.nineoldandroids:library:2.4.0' 
compile 'com.github.bluejamesbond:textjustify-android:2.1.0' 
compile 'it.neokree:MaterialTabs:0.11' 
compile('com.googlecode.json-simple:json-simple:1.1.1') { 
    exclude module: 'junit' 
} 
compile ('eu.livotov.labs.android:CAMView:[email protected]') {transitive=true} 
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1' 
} 

当我删除multiDexEnable:

org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:transformDexArchiveWithExternalLibsDexMergerForDebug'. 
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.android.builder.dexing.DexArchiveMergerException: Unable to merge dex 
at com.android.builder.dexing.DxDexArchiveMerger.mergeMonoDex(DxDexArchiveMerger.java:177) 
at com.android.builder.dexing.DxDexArchiveMerger.mergeDexArchives(DxDexArchiveMerger.java:118) 
at com.android.build.gradle.internal.transforms.DexMergerTransformCallable.call(DexMergerTransformCallable.java:97) 
at com.android.build.gradle.internal.transforms.ExternalLibsMergerTransform.transform(ExternalLibsMergerTransform.kt:121) 
at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:222) 
at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:218) 
at com.android.builder.profile.ThreadRecorder.record(ThreadRecorder.java:102) 
at com.android.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.android.builder.dexing.DexArchiveMergerException: Unable to merge dex 
at com.android.builder.dexing.DxDexArchiveMerger.lambda$mergeMonoDex$0(DxDexArchiveMerger.java:171) 
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 Landroid/support/v4/view/accessibility/AccessibilityRecordCompatIcsMr1; 
at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:661) 
at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:616) 
at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:598) 
at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:171) 
at com.android.dx.merge.DexMerger.merge(DexMerger.java:198) 
at com.android.builder.dexing.DexArchiveMergerCallable.call(DexArchiveMergerCa llable.java:61) 
... 1 more 
+0

你已经尝试没有multidex? –

+0

是的。我试图在Android Studio 2.3.3中运行应用程序,并且它可以工作。所以这是只有当我使用3.0版本 – qubuss

+1

只是一个猜测,但我认为它涉及到重复的依赖关系的问题。因为这个问题发生很多,因为每个人都在更新到Android Studio 3.0。例如[这里](https://*.com/questions/47086275/trying-to-build-android-project-with-glide-package-throws-unable-to-merge-dex)。我的猜测是,如果关闭multidex库,您可能会看到更好的堆栈跟踪,显示重复错误。 –

这与dupl有关你项目中的依赖项。发生了重复的依赖关系,这是因为某些库隐式依赖于相同的库,但具有不同的版本。在Android Studio中使用的Gradle 4.1不支持库复制。

您可以从依赖树用下面的命令在Linux中的终端检查(应用是你的模块名):

./gradlew app:dependencies 

,或者如果你正在使用Windows尝试这种在命令提示符下:

gradlew.bat app:dependencies 

然后,在找到它之后,您需要将其从库中排除并仅使用其中一个。事情是这样的:

compile('com.library.name:version') { 
    // this is a case for duplicate support library version. 
    exclude group: 'com.android.support' 
    exclude module: 'appcompat-v7' 
} 

需要指出的是,你最好使用的 compileSdkVersionbuildToolsVersiontargetSdkVersionSupport Library相同的版本。

在我的情况下,它与awsgateway sdk给出的gson和gson已经存在的依赖性问题有关。

gradle -q app:dependencies 

没有显示任何依赖关系的差异,但gradle构建堆栈跟踪显示它与gson相关。 引起:com.android.dex.DexException:多个dex文件定义Lcom/google/gson/FieldNamingStrategy;

继此issue之后,我在config下添加了build.gradle,但没有解决问题。

compile("com.google.code.gson:gson:2.3") { 
    exclude module: 'gson:2.2.4' 
} 

我不得不手动去除(SDK生成期间由给定apigateway GSON-2.2.4.jar)罐子存在于应用程序/库文件夹。

我面临同样的问题,然后我发现从Here (Github)

解决方案在默认配置添加

multiDexEnabled true 

为例

defaultConfig { 
    applicationId "my application id " 
    minSdkVersion 14 
    targetSdkVersion 27 
    versionCode 1 
    versionName '1.0' 
    multiDexEnabled true 
} 

然后添加

implementation('commons-validator:commons-validator:1.4.1') { 
    exclude group: 'commons-collections', module: 'commons-collections' 
} 

在您的依赖项中。 这对我来说是我的工作,我希望它也能解决你的问题:)

+0

为什么你认为OP的问题和你的问题(或者LeakCanary列表的问题)是“一样的”?为什么你建议在OPs默认配置中添加'multiDexEnabled true',当它已经在那里?最后,为什么你建议OP添加一个库而没有给出理由呢? – kalabalik

+0

我建议,因为我遵循的答案,但它不适合我。我想其他人可能会面临同样的问题,这就是为什么我剪切我如何解决这个问题。 –