【问题标题】:ZipException duplicate entry: android/support/v4/widget/CursorAdapter$MyDataSetObserver.classZipException 重复条目:android/support/v4/widget/CursorAdapter$MyDataSetObserver.class
【发布时间】:2018-01-16 17:22:06
【问题描述】:

错误:任务 ':app:transformClassesWithJarMergingForRelease' 执行失败。

com.android.build.api.transform.TransformException:java.util.zip.ZipException:重复条目:android/support/v4/widget/CursorAdapter$MyDataSetObserver.class - 列表项

apply plugin: 'com.android.application'

android {
    compileSdkVersion 26
    buildToolsVersion "26.0.1"
    dexOptions {
        javaMaxHeapSize "4g"
    }
    defaultConfig {
        applicationId "com.omairm.hoops"
        minSdkVersion 14
        targetSdkVersion 23
        multiDexEnabled true

        ndk {
            moduleName "player_shared"
        }
    }
    sourceSets {
            main {
                jni.srcDirs = []
            }
        }

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

dependencies {
    compile ('com.google.android.gms:play-services:+'){exclude module: 'Support-v4'}
    compile files('libs/PTAdRevMob.jar')
    compile files('libs/dagger-1.2.2.jar')
    compile files('libs/javax.inject-1.jar')
    compile files('libs/nineoldandroids-2.4.0.jar')
    compile files('libs/support-v4-19.0.1.jar')
}

我需要删除 CursorAdapter.class 吗?

【问题讨论】:

  • 您究竟想使用 JAR 文件做什么?您意识到您使用的是非常古老的库,对吧?
  • 我明白了...我可能建议在深入 Android 之前学习 Java 基础知识。然后您可以选择了解有关 Maven 或 Gradle 的更多信息...

标签: android android-gradle-plugin


【解决方案1】:

您应该在 build.gradle 中添加与此类似的内容,其中将重复文件添加到排除

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

【讨论】:

  • 是的,建议他添加如图所示的重复文件
  • 我不确定如何使用重复文件对此进行编码。我真的是编码世界的新手
【解决方案2】:

我需要删除 cursoradapter.class

您正在阅读错误并识别出它告诉您的至少一部分内容,这很好,但您不能只从 JAR 文件中删除一个类。 Gradle 所经历的构建过程只是在它发现的第一个类冲突中抛出错误,如果你只关注那个冲突,将会有更多。


我的建议是为您拥有的每个 JAR 文件找到正确的和当前的库,然后删除这些 jar 文件。

此外,请尝试实际使用数字值而不是版本的加号,因为您不想使用每隔几周就会更改的库的 alpha/beta 版本

如果你search around Maven 你可以替换大部分 JAR 文件

dependencies {
    compile "com.android.support:appcompat-v7:26+"
    // Don't use just a plus here 
    compile ('com.google.android.gms:play-services:+'){exclude module: 'support-v4'}
    compile files('libs/PTAdRevMob.jar')
    compile group: 'com.squareup.dagger', name: 'dagger', version: '1.2.2'
    // compile group: 'com.nineoldandroids', name: 'library', version: '2.4.0'
} 

还值得一提的是,nineoldandroids 已被弃用。由于您使用的是minSdkVersion 14,我认为您甚至不需要它。

Dagger 自 1.2 版以来也发布了许多版本,但它已经包含 javax 注入框架(请参阅编译的依赖项https://mvnrepository.com/artifact/com.squareup.dagger/dagger/1.2.2

您肯定也想看看Google Play | Selectively compiling APIs into your executable

请注意,如果 PTAdRevMob.jar 的任何类仍然与此处的任何其他库冲突,您仍然会收到错误消息,并且可能需要切换到不同的广告提供程序

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-05
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多