Android Studio 3.0:无法合并DEX

时间:2017-11-04 18:36:53

标签: android gradle android-gradle

自从我更新到Android Studio 3.0后,我无法再在我的设备上运行我的项目。我搜索了Google和StackOverflow这个问题似乎是Android Studio 3.0的问题。我已经尝试了StackOverflow上的所有解决方案,但它们似乎都没有用。另外我的Gradle文件非常混乱,因为我刚刚添加了一行代码来修复问题所以如果有人可以帮我清理它会真的有用。我在发布之前已经研究了很多。

我的错误是:

  

错误:任务':app:transformDexArchiveWithExternalLibsDexMergerForDebug'执行失败。   java.lang.RuntimeException:com.android.builder.dexing.DexArchiveMergerException:无法合并dex

我的Gradle文件:

apply plugin: 'com.android.application'

android {     compileSdkVersion 26     buildToolsVersion' 26.0.2'

defaultConfig {
    renderscriptTargetApi 15
    renderscriptSupportModeEnabled true
    applicationId "com.firebase.android"
    minSdkVersion 16
    targetSdkVersion 26
    versionCode 1
    versionName "1.0"
    multiDexEnabled true
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
}

repositories {
    maven { url "https://jitpack.io" }
    google()
}




dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile('io.nlopez.smartlocation:library:3.3.1') {
        transitive = false
    }
    compile 'com.android.support:appcompat-v7:26.1.0'
    compile 'com.google.android.gms:play-services-location:11.4.2'
    compile 'com.google.android.gms:play-services-places:11.4.2'
    compile 'com.google.firebase:firebase-auth:11.4.2'
    compile 'com.google.firebase:firebase-database:11.4.2'
    compile 'com.google.firebase:firebase-storage:11.4.2'
    compile 'com.firebaseui:firebase-ui-storage:1.2.0'
    compile 'com.google.android.gms:play-services-auth:11.4.2'
    compile 'com.android.support:design:26.1.0'
    compile 'com.android.support:cardview-v7:26.1.0'
    compile 'com.android.support:recyclerview-v7:26.1.0'
    compile 'de.hdodenhof:circleimageview:1.3.0'
    compile 'com.github.bumptech.glide:glide:3.7.0'
    compile 'com.github.arimorty:floatingsearchview:2.0.3'
    compile 'com.crystal:crystalpreloaders:1.0.0'
    compile 'com.github.mmin18:realtimeblurview:1.1.0'
    compile 'com.orhanobut:dialogplus:1.11@aar'
    compile 'com.google.code.gson:gson:2.8.0'
    compile 'org.apache.commons:commons-io:1.3.2'
    compile 'jp.wasabeef:recyclerview-animators:2.2.6'
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    compile 'com.theartofdev.edmodo:android-image-cropper:2.4.6'
    compile 'com.otaliastudios:cameraview:1.2.1'
    compile 'jp.co.cyberagent.android.gpuimage:gpuimage-library:1.4.1'
    compile 'com.eftimoff:android-viewpager-transformers:1.0.1@aar'
    compile 'com.github.zomato:androidphotofilters:1.0.1'
    compile 'com.github.waynell:VideoRangeSlider:1.0.1'
    testCompile 'junit:junit:4.12'
    compile project(':ptr-lib')
    compile project(path: ':FFmpegAndroid')
}

configurations.all {
    resolutionStrategy.eachDependency { DependencyResolveDetails details ->
        def requested = details.requested
        if (requested.group == 'com.android.support') {
            if (!requested.name.startsWith("multidex")) {
                details.useVersion '25.3.0'
            }
        }
    }
}

apply plugin: 'com.google.gms.google-services'

更新:添加了Gradle日志输出

这是Gradle Stacktrace输出

    Executing tasks: [:app:assembleDebug]

Configuration on demand is an incubating feature.
Configuration 'compile' in project ':app' is deprecated. Use 'implementation' instead.
Configuration 'testCompile' in project ':app' is deprecated. Use 'testImplementation' instead.
registerResGeneratingTask is deprecated, use registerGeneratedFolders(FileCollection)
registerResGeneratingTask is deprecated, use registerGeneratedFolders(FileCollection)
Configuration 'compile' in project ':FFmpegAndroid' is deprecated. Use 'implementation' instead.
Configuration 'androidTestCompile' in project ':FFmpegAndroid' is deprecated. Use 'androidTestImplementation' instead.
:FFmpegAndroid:preBuild UP-TO-DATE
:FFmpegAndroid:preDebugBuild UP-TO-DATE
:FFmpegAndroid:compileDebugAidl UP-TO-DATE
:FFmpegAndroid:compileDebugRenderscript UP-TO-DATE
:FFmpegAndroid:checkDebugManifest UP-TO-DATE
:FFmpegAndroid:generateDebugBuildConfig UP-TO-DATE
:FFmpegAndroid:prepareLintJar UP-TO-DATE
:FFmpegAndroid:generateDebugResValues UP-TO-DATE
:FFmpegAndroid:generateDebugResources UP-TO-DATE
:FFmpegAndroid:packageDebugResources UP-TO-DATE
:FFmpegAndroid:platformAttrExtractor UP-TO-DATE
:FFmpegAndroid:processDebugManifest UP-TO-DATE
:FFmpegAndroid:processDebugResources
:FFmpegAndroid:generateDebugSources
:FFmpegAndroid:javaPreCompileDebug UP-TO-DATE
:FFmpegAndroid:compileDebugJavaWithJavac UP-TO-DATE
:FFmpegAndroid:processDebugJavaRes NO-SOURCE
:FFmpegAndroid:transformClassesAndResourcesWithPrepareIntermediateJarsForDebug UP-TO-DATE
:app:preBuild UP-TO-DATE
:ptr-lib:preBuild UP-TO-DATE
:ptr-lib:preDebugBuild UP-TO-DATE
:ptr-lib:checkDebugManifest UP-TO-DATE
:ptr-lib:processDebugManifest UP-TO-DATE
:app:preDebugBuild UP-TO-DATE
:ptr-lib:compileDebugAidl UP-TO-DATE
:app:compileDebugAidl UP-TO-DATE
:FFmpegAndroid:packageDebugRenderscript NO-SOURCE
:ptr-lib:packageDebugRenderscript NO-SOURCE
:app:compileDebugRenderscript UP-TO-DATE
:app:checkDebugManifest UP-TO-DATE
:app:generateDebugBuildConfig UP-TO-DATE
:app:prepareLintJar UP-TO-DATE
:app:generateDebugResValues UP-TO-DATE
:app:generateDebugResources UP-TO-DATE
:app:processDebugGoogleServices
Parsing json file: /home/gaz/AndroidStudioProjects/Dissertation/FireBaseLogin/app/google-services.json
:ptr-lib:compileDebugRenderscript UP-TO-DATE
:ptr-lib:generateDebugResValues UP-TO-DATE
:ptr-lib:generateDebugResources UP-TO-DATE
:ptr-lib:packageDebugResources UP-TO-DATE
:app:mergeDebugResources UP-TO-DATE
:app:createDebugCompatibleScreenManifests UP-TO-DATE
:app:processDebugManifest
:app:splitsDiscoveryTaskDebug UP-TO-DATE
:ptr-lib:platformAttrExtractor UP-TO-DATE
:ptr-lib:processDebugResources
:app:processDebugResources
:app:generateDebugSources
:ptr-lib:generateDebugBuildConfig UP-TO-DATE
:ptr-lib:prepareLintJar UP-TO-DATE
:ptr-lib:generateDebugSources
:ptr-lib:javaPreCompileDebug UP-TO-DATE
:ptr-lib:compileDebugJavaWithJavac UP-TO-DATE
:ptr-lib:processDebugJavaRes NO-SOURCE
:ptr-lib:transformClassesAndResourcesWithPrepareIntermediateJarsForDebug UP-TO-DATE
:app:javaPreCompileDebug UP-TO-DATE
:app:compileDebugJavaWithJavac UP-TO-DATE
:app:compileDebugNdk NO-SOURCE
:app:compileDebugSources UP-TO-DATE
:FFmpegAndroid:mergeDebugShaders UP-TO-DATE
:FFmpegAndroid:compileDebugShaders UP-TO-DATE
:FFmpegAndroid:generateDebugAssets UP-TO-DATE
:FFmpegAndroid:mergeDebugAssets UP-TO-DATE
:app:mergeDebugShaders UP-TO-DATE
:app:compileDebugShaders UP-TO-DATE
:app:generateDebugAssets UP-TO-DATE
:ptr-lib:mergeDebugShaders UP-TO-DATE
:ptr-lib:compileDebugShaders UP-TO-DATE
:ptr-lib:generateDebugAssets UP-TO-DATE
:ptr-lib:mergeDebugAssets UP-TO-DATE
:app:mergeDebugAssets UP-TO-DATE
:app:transformClassesWithDexBuilderForDebug
:app:transformClassesWithMultidexlistForDebug UP-TO-DATE
:app:transformDexArchiveWithDexMergerForDebug
AGPBI: {"kind":"error","text":"Error converting bytecode to dex:\nCause: com.android.dex.DexException: Multiple dex files define Lorg/apache/commons/io/filefilter/AgeFileFilter;","sources":[{}],"original":"UNEXPECTED TOP-LEVEL EXCEPTION:\ncom.android.dex.DexException: Multiple dex files define Lorg/apache/commons/io/filefilter/AgeFileFilter;\n","tool":"Dex"}
AGPBI: {"kind":"error","text":"com.android.dex.DexException: Multiple dex files define Lorg/apache/commons/io/filefilter/AgeFileFilter;","sources":[{}]}
AGPBI: {"kind":"error","text":"\tat com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:661)","sources":[{}]}
AGPBI: {"kind":"error","text":"\tat com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:616)","sources":[{}]}
AGPBI: {"kind":"error","text":"\tat com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:598)","sources":[{}]}
AGPBI: {"kind":"error","text":"\tat com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:171)","sources":[{}]}
AGPBI: {"kind":"error","text":"\tat com.android.dx.merge.DexMerger.merge(DexMerger.java:198)","sources":[{}]}
AGPBI: {"kind":"error","text":"\tat com.android.builder.dexing.DexArchiveMergerCallable.call(DexArchiveMergerCallable.java:61)","sources":[{}]}
AGPBI: {"kind":"error","text":"\tat com.android.builder.dexing.DexArchiveMergerCallable.call(DexArchiveMergerCallable.java:36)","sources":[{}]}
AGPBI: {"kind":"error","text":"\tat java.util.concurrent.ForkJoinTask$AdaptedCallable.exec(ForkJoinTask.java:1424)","sources":[{}]}
AGPBI: {"kind":"error","text":"\tat java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)","sources":[{}]}
AGPBI: {"kind":"error","text":"\tat java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)","sources":[{}]}
AGPBI: {"kind":"error","text":"\tat java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)","sources":[{}]}
AGPBI: {"kind":"error","text":"\tat java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)","sources":[{}]}

 FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:transformDexArchiveWithDexMergerForDebug'.
> com.android.build.api.transform.TransformException: com.android.dex.DexException: Multiple dex files define Lorg/apache/commons/io/filefilter/AgeFileFilter;

* Try:
Run with --info or --debug option to get more log output.

* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:transformDexArchiveWithDexMergerForDebug'.
    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: com.android.build.api.transform.TransformException: com.android.dex.DexException: Multiple dex files define Lorg/apache/commons/io/filefilter/AgeFileFilter;
    at com.android.builder.profile.Recorder$Block.handleException(Recorder.java:55)
    at com.android.builder.profile.ThreadRecorder.record(ThreadRecorder.java:104)
    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: com.android.build.api.transform.TransformException: com.android.dex.DexException: Multiple dex files define Lorg/apache/commons/io/filefilter/AgeFileFilter;
    at com.android.build.gradle.internal.transforms.DexMergerTransform.transform(DexMergerTransform.java:230)
    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)
    ... 39 more
Caused by: com.android.dex.DexException: Multiple dex files define Lorg/apache/commons/io/filefilter/AgeFileFilter;
    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(DexArchiveMergerCallable.java:61)
    at com.android.builder.dexing.DexArchiveMergerCallable.call(DexArchiveMergerCallable.java:36)


* Get more help at https://help.gradle.org

BUILD FAILED in 7s

53 actionable tasks: 7 executed, 46 up-to-date

1 个答案:

答案 0 :(得分:1)

您的错误是:

Multiple dex files define Lorg/apache/commons/io/filefilter/AgeFileFilter

两个(或许更多)您的依赖项正在提供org.apache.commons.io.filefilter.AgeFileFilter类。由于您的compile 'org.apache.commons:commons-io:1.3.2'恰好有dependencies,因此该评论可以说明,因为该库肯定会提供此课程。

  

无论如何在我的项目中使用这个lib而不会出错?

最有可能的是,您已经拥有了库,可能来自JAR。如果你发现你使用的org.apache.commons:commons-io:1.3.2类有你不能再使用的......你现在有一个更大的问题。您需要确定哪些其他依赖项做了些愚蠢的事情,例如在自己的库中包含org.apache.commons.io.filefilter.AgeFileFilter。这可能会变得复杂。

  

你还认为我可以清理我的Gradle文件吗?

如果libs/中没有任何JAR,请删除compile fileTree(include: ['*.jar'], dir: 'libs'),因为您不需要该行。如果libs/中有JAR,请尝试查找工件(与其他大多数依赖项一样),然后使用它。

您似乎使用的是Android Gradle Plugin的Android Studio 3.0,版本3.0.0以及Gradle的可比较版本(例如4.1)。因此,这些消息将持续存在,直到您进行所识别的更改:

Configuration 'compile' in project ':app' is deprecated. Use 'implementation' instead.
Configuration 'testCompile' in project ':app' is deprecated. Use 'testImplementation' instead.
registerResGeneratingTask is deprecated, use registerGeneratedFolders(FileCollection)
registerResGeneratingTask is deprecated, use registerGeneratedFolders(FileCollection)
Configuration 'compile' in project ':FFmpegAndroid' is deprecated. Use 'implementation' instead.
Configuration 'androidTestCompile' in project ':FFmpegAndroid' is deprecated. Use 'androidTestImplementation' instead.

除此之外,尝试使用更少的依赖项。使用图书馆很棒,就像吃一块蛋糕一样。使用20多个库不太好,就像吃20多块蛋糕一样。