java.util.zip.ZipException:重复条目:android/support/v4/view/MotionEventCompatEclair.class

java.util.zip.ZipException: duplicate entry: android/support/v4/view/MotionEventCompatEclair.class

我是 android 工作室的新手,正在尝试从 eclipse 导入一个项目,但我觉得我 运行 解决了每一个可能的问题。我目前收到的错误是:

Error:Execution failed for task ':jobFlexwithInvoice:packageAllDebugClassesForMultiDex'.
> java.util.zip.ZipException: duplicate entry: android/support/v4/view/MotionEventCompatEclair.class

我见过类似 here and here 等问题的答案。但我认为我需要更多帮助,因为它不会消失。我已经将异常添加到我的 build.gradle 文件中的几乎所有内容,包括实际支持 4v 依赖只是为了踢,但我仍然收到此错误。而且由于包含的项目,我还有多个 build.gradle 文件?似乎可以忽略项目 build.gradle 文件,我只需要将例外添加到模块 build.gradle 文件中即可? (当有人说要向 build.gradle 文件中添加一些内容时,这很烦人,我并不总是确定是哪一个)

无论如何,这里是我的每个 build.gradle 文件的依赖项部分,因为它们当前是:

我的应用程序:

dependencies {
    compile ('com.android.support:multidex:1.0.0'){
        exclude module: 'support-v4'
    }
    compile project(':facebook') {
        exclude module: 'support-v4'
    }
    compile project(':apptentive')
    compile project(':androidsdkui'){
        exclude module: 'support-v4'
    }
    compile ('com.google.android.gms:play-services:+'){
        exclude module: 'support-v4'
    }
    compile files('libs/android-support-v13.jar') {
        exclude module: 'support-v4'
    }
    compile files('libs/DynamicPDF.jar')
    compile files('libs/picasso-2.5.0.jar')
    compile ('com.android.support:support-v4:22.0.0'){
        exclude module: 'support-v4'
    }
}

脸书:

dependencies {
    compile files('libs/bolts-android-1.2.1.jar')
    compile ('com.android.support:support-v4:22.0.0'){
        exclude module: 'support-v4'
    }
}

androidsdkui:

dependencies {
    compile files('libs/appboy.jar')
    compile ('com.android.support:support-v4:22.0.0'){
        exclude module: 'support-v4'
    }
}

还有一个 apptentive build.gradle 文件,但它没有任何依赖项。在添加所有这些异常之前,我遇到了与第一个 link 相同的错误,现在唯一的区别是它的 android/support/v4/view/MotionEventCompatEclair.class 而不是 android/support/v4/util/TimeUtils.class

如果有一种方法可以查看重复项的来源,那也很好,我无法通过快速 google 搜索找到任何内容。

您可以尝试在 allprojects 元素内的顶级 build.gradle 文件中添加以下内容吗?它应该如下所示。

allprojects {
    configurations {
        all*.exclude group: 'com.android.support', module: 'support-v4'
    }
}

希望对您有所帮助。

我更新了问题,这样您就可以看到我做错事的一些方式。我的一些项目包括支持 v4,我并没有排除它们。从项目中排除事物的正确方法是:

compile (project(':facebook')) {
    exclude module: 'support-v4'
}

你必须在编译后将额外的一组括号放在所有内容周围。我假设从文件中排除内容也是如此

即。

compile file(myfile.jar)

会变成

compile (file(myfile.jar)) { 
    exclude module: 'support-v4'
}