无法合并dex Android studio 3.0

无法合并dex Android studio 3.0,android,android-studio,dex,Android,Android Studio,Dex,我的项目有些问题。在Android studio 2.3.3中,它工作正常,但当我升级到3.0时,我遇到了marge dex的问题 我清理和重建项目 出了什么问题: 任务“:app:transformDexArchiveWithExternalLibsDexMergerForDebug”的执行失败。 com.android.builder.dexing.DexArchiveMergerException:无法合并dex 堆栈跟踪: org.gradle.api.tasks.TaskExecuti

我的项目有些问题。在Android studio 2.3.3中,它工作正常,但当我升级到3.0时,我遇到了marge dex的问题

我清理和重建项目

出了什么问题:

任务“:app: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
格雷德尔先生

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:1.5@aar'
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:2.0.1@aar') {transitive=true}
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
}
删除多索引时,请启用:

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

这与项目中的重复依赖项有关。由于某些库隐式依赖于同一个库,但版本不同,因此会发生重复依赖。Android Studio中使用的Gradle 4.1不能原谅库复制

您可以在Linux终端中使用以下命令从依赖项树检查它(app是您的模块名):

或者,如果您使用的是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'
}
请注意,您最好使用相同版本的
compileSdkVersion
buildToolsVersion
targetSdkVersion
,以及
支持库
,在我的案例中,它与awsgateway sdk提供的gson的依赖性问题有关,并且gson已经存在

gradle -q app:dependencies
没有显示依赖项之间的任何差异,但gradle构建堆栈跟踪显示它与gson有关。 原因:com.android.dex.dex异常:多个dex文件定义Lcom/google/gson/FieldNamingStrategy

接下来,我在build.gradle中添加了以下配置,但这并没有解决问题

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

我不得不手动删除app/libs文件夹中的jar(sdk生成期间apigateway提供的gson-2.2.4.jar)。

我面临同样的问题,然后从

在默认配置中 例

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'
}
在您的依赖项中。
这对我来说很有效,我希望这也是你的问题:)

你已经尝试过不使用multidex了吗?是的。我正在尝试在Android Studio 2.3.3中运行应用程序,它可以正常工作。所以,只有当我使用3.0版本时,这才是一个问题只是猜测,但我认为这与依赖项的重复有关。因为这个问题经常发生,因为每个人都在升级到Android Studio 3.0。例如。我的猜测是,如果您关闭multidex库,您可能会看到更好的堆栈跟踪,显示复制错误。为什么您认为OPs问题和您的问题(或LeakCanary列表的问题)是“相同的”?既然OPs默认配置已经存在,为什么建议将
multiDexEnabled true
添加到OPs默认配置中?最后,你为什么建议OP在没有给出理由的情况下添加一个库呢?我的建议是因为我遵循了答案,但它对我不起作用。我想其他人可能也会面临同样的问题,这就是为什么我应该如何解决这个问题。
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'
}