ZipException重复条目:android / support / v4 / widget / CursorAdapter $ MyDataSetObserver.class

时间:2017-08-09 01:12:24

标签: android android-gradle

错误:任务执行失败':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?

2 个答案:

答案 0 :(得分:1)

  

我需要删除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'
} 

还值得一提的是,九折手机已被弃用。由于您使用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有任何类仍与此处的任何其他库发生冲突,您仍然会收到错误,并且可能需要切换到其他广告提供商

答案 1 :(得分:0)

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

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