无法合并dex Android Studio 3.0 [英] Unable to merge dex Android studio 3.0

查看:91
本文介绍了无法合并dex Android Studio 3.0的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的项目有问题.在Android Studio 2.3.3中,它可以正常工作,但是当我更新到3.0时,我无法使用dex.

I have some problem with my project. In Android studio 2.3.3 it works fine but when I updated to 3.0 I have problem to marge dex.

我清理并重建项目.

怎么了:

任务':app:transformDexArchiveWithExternalLibsDexMergerForDebug'的执行失败.com.android.builder.dexing.DexArchiveMergerException:无法合并dex

Execution failed for task ':app:transformDexArchiveWithExternalLibsDexMergerForDebug'. com.android.builder.dexing.DexArchiveMergerException: Unable to merge dex

StackTrace:

StackTrace:

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

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: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'
}

当我删除multiDexEnable时:

When i delete 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

推荐答案

这与项目中重复的依赖项有关.发生重复的依赖关系是因为某些库隐式依赖于相同的库,但版本不同.Android Studio中使用的Gradle 4.1不能原谅库的复制.

This is related to duplicated dependencies in your project. There is a duplicate dependency which is happened because some libraries is implicitly dependent to the same library but with different version. Gradle 4.1 which is used in the Android Studio is not forgiving for library duplication.

您可以在Linux的终端中使用以下命令从依赖关系树中对其进行检查( app 是您的模块名称):

You can check it from dependencies tree with the following command in your terminal in Linux (app is your module name):

./gradlew app:dependencies

或者如果您使用的是Windows,请在命令提示符下尝试以下操作:

or if you're using Windows try this in command prompt:

gradlew.bat app:dependencies

然后,在找到它之后,您需要将其从库中排除并仅使用其中之一.像这样:

Then after you found it, you need to exclude it from the library and use only one of them. Something like this:

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 Support Library .

Be noted that you are better to use the same version of compileSdkVersion, buildToolsVersion, targetSdkVersion, and Support Library.

这篇关于无法合并dex Android Studio 3.0的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆