【问题标题】:Cause: com.android.dex.DexException: Multiple dex files define Lorg/apache/commons/io/IOCase in Studio 3.0原因:com.android.dex.DexException:多个 dex 文件在 Studio 3.0 中定义 Lorg/apache/commons/io/IOCase
【发布时间】:2017-10-30 12:16:27
【问题描述】:

我正在开发一个项目。这在 Android Studio 2.3.3 上运行良好,但是当我更新我的 Android Studio 3.0 并打开我的项目然后它无法组装并且它发送给我下面的错误日志时会发生什么。

错误日志

Error:Error converting bytecode to dex:
Cause: com.android.dex.DexException: Multiple dex files define Lorg/apache/commons/io/IOCase;
Error:com.android.dex.DexException: Multiple dex files define Lorg/apache/commons/io/IOCase;
Error:    at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:661)
Error:  at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:616)
Error:  at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:598)
Error:  at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:171)
Error:  at com.android.dx.merge.DexMerger.merge(DexMerger.java:198)
Error:  at com.android.builder.dexing.DexArchiveMergerCallable.call(DexArchiveMergerCallable.java:61)
Error:  at com.android.builder.dexing.DexArchiveMergerCallable.call(DexArchiveMergerCallable.java:36)
Error:  at java.util.concurrent.ForkJoinTask$AdaptedCallable.exec(ForkJoinTask.java:1424)
Error:  at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
Error:  at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
Error:  at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
Error:  at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)
Error:Execution failed for task ':app:transformDexArchiveWithDexMergerForDebug'.
> com.android.build.api.transform.TransformException: com.android.dex.DexException: Multiple dex files define Lorg/apache/commons/io/IOCase;

请不要重复,因为我已经尝试过以下所有内容

  • 清理项目
  • 重建项目
  • 重新打开项目并清理和重建后删除了项目中的 /.gradle 文件夹
  • 重新打开项目并清理和重建后删除了 .gradle 现金文件夹

其他的认为是我检查了下面的堆栈溢出问题及其答案,其他的我也没有得到解决方案。

1. Question2. Question3. Question4. Question5. Question

项目级build.gradle文件

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.0'
        classpath 'com.google.gms:google-services:3.1.0'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
        google()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

应用级build.gradle文件

apply plugin: 'com.android.application'

android {
    compileSdkVersion 25
    buildToolsVersion '26.0.2'
    defaultConfig {
        applicationId "com.mypackage"
        minSdkVersion 15
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

        // for render script to create blur image
        renderscriptTargetApi 18
        renderscriptSupportModeEnabled true

        multiDexEnabled true

    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:25.3.1'
    compile 'com.android.support:cardview-v7:25.3.1'
    compile 'com.android.support:design:25.3.1'
    compile 'com.android.support:multidex:1.0.0'
    testCompile 'junit:junit:4.12'

    compile 'com.jakewharton:butterknife:8.8.1'
    annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'

    //google API
    compile 'com.google.firebase:firebase-auth:10.0.1'
    compile 'com.google.firebase:firebase-messaging:10.0.1'
    compile 'com.google.firebase:firebase-core:10.0.1'
    compile 'com.google.android.gms:play-services-auth:10.0.1'
    compile 'com.google.android.gms:play-services-places:10.0.1'
    compile 'com.google.android.gms:play-services-maps:10.0.1'

    //facebook SDK
    compile 'com.facebook.android:facebook-android-sdk:[4,5)'

    compile 'de.hdodenhof:circleimageview:2.1.0'
    compile 'com.github.bumptech.glide:glide:3.7.0'
    compile 'com.squareup.okhttp3:okhttp:3.4.2'
    compile ('org.apache.commons:commons-lang3:3.4'){
        exclude module: 'commons-io'
    }

    compile('net.yazeed44.imagepicker:imagepicker:1.3.0') {
        exclude module: 'cam2'
    }
}
apply plugin: 'com.google.gms.google-services'

请帮我解决这个问题。我可以知道你是否需要我这边的任何东西。帮助将不胜感激。提前致谢。

【问题讨论】:

  • libs/ 中是否有任何 JAR?如果没有,请删除compile fileTree(dir: 'libs', include: ['*.jar']),因为您没有使用该行。如果你是,那么你有什么 JAR 在那里。在某个地方,您有 2+ 个定义 org.apache.commons.io.IOCase 的依赖项,您需要修复重复项。
  • 我没有使用任何jar 文件,但是当我创建项目时,它会自动添加该行。可以删除该行并再次重建吗?我也试过exclude module,但也没有工作?
  • 您可以(并且应该)删除该行,但这不会解决问题。 2+ 的其他依赖项必须包含该类。一个可能是org.apache.commons:commons-lang3:3.4。您需要找到另一个拥有它,然后停止使用这些依赖项之一。我相当肯定com.android.support 库都没有定义org.apache.commons.io.IOCase,所以我建议您从检查其他依赖项开始。
  • 依赖项看起来像这样 gist.github.com/anonymous/78aef3725caad6cab6bd8bb7abdbf558 但我不知道如何找到?
  • 嗯,班级是org.apache.commons.io.IOCase。您在该列表中同时拥有 org.apache.commons:commons-io:1.3.2@jarcommons-io:commons-io:1.3.2@jar。我的猜测是你的问题就在那里。使用exclude 删除其中一个,看看你的问题是否解决了。

标签: android apache gradle android-studio-3.0 android-multidex


【解决方案1】:

我同意@CommonsWare 的观点,即在您的项目中还有另一个库也包含commons-io

有一个选项可以解决 gradle 依赖项中的冲突问题。在您的应用级别 build.gralde 文件中添加以下代码。

configurations.all {
    resolutionStrategy.dependencySubstitution {
        substitute module('org.apache.commons:commons-io:1.3.2') with module('commons-io:commons-io:1.3.2')
    }
}

原因是'org.apache.commons:commons-io:1.3.2' 是冲突的原因检查此堆栈溢出 question's answer.

注意:- 了解更多关于apache commons collections及其不同版本check this answer

【讨论】:

  • 终于成功了 我花了几个小时解决这个问题!
【解决方案2】:

如果您在 build.gradle 文件中明确包含此依赖项:

org.apache.commons:commons-io:1.3.2

用这个(或更高版本)替换它:

commons-io:commons-io:2.4

您可能需要进行清理/重建以摆脱缓存版本。 org.apache... 命名的一个既是错误的名称,现在已经非常过时了。奇怪的是,其他一些org.apache... 命名的显然没问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-12
    • 1970-01-01
    • 1970-01-01
    • 2018-03-15
    • 2018-04-21
    • 2018-07-08
    相关资源
    最近更新 更多