2017-11-11 163 views
1

我的項目存在一些問題。在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://stackoverflow.com/questions/47086275/trying-to-build-android-project-with-glide-package-throws-unable-to-merge-dex)。我的猜測是,如果關閉multidex庫,您可能會看到更好的堆棧跟蹤,顯示重複錯誤。 –

回答

2

這與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相同的版本。

0

在我的情況下,它與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)罐子存在於應用程序/庫文件夾。

-2

我面臨同樣的問題,然後我發現從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

我建議,因爲我遵循的答案,但它不適合我。我想其他人可能會面臨同樣的問題,這就是爲什麼我剪切我如何解決這個問題。 –

相關問題