Unable to merge dex Android studio 3.0 [duplicate]

喜欢而已 提交于 2019-12-12 17:49:39

问题


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.

I clean and rebuild project.

What is wrong:

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

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

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

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

回答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.

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

./gradlew app:dependencies

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

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




回答2:


In my case it was related to dependency issue with gson given by awsgateway sdk and the gson already present.

gradle -q app:dependencies

Didn't show any differences in the dependencies, but the gradle build stack trace showed it was something related to gson. Caused by: com.android.dex.DexException: Multiple dex files define Lcom/google/gson/FieldNamingStrategy;

Following this issue, I added below config to build.gradle but that didn't fix the issue.

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

I had to manually remove the jar(gson-2.2.4.jar given by apigateway during sdk generation) present in the app/libs folder.




回答3:


i face the same problem then i found the solution from Here (Github)

Add

multiDexEnabled true

in Your Default Configuration exemple

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

then Add

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

in your dependencies. It's work for me i hope it's also slution your problem :)



来源:https://stackoverflow.com/questions/47241629/unable-to-merge-dex-android-studio-3-0

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!