Search code examples
androidandroid-gradle-pluginproguardandroid-proguardandroid-build

Proguard Exception java.io.IOException: Duplicate zip entry


While building app with proguard for release i got this error.

Execution failed for task ':app:transformClassesAndResourcesWithProguardForRelease'.

Warning:Exception while processing task java.io.IOException: Can't write 
[C:\Users\sagar.HP\AndroidStudioProjects\MyApp\app\build\intermediates\
transforms\proguard\release\jars\3\1f\main.jar] (Can't read 
[C:\Users\sagar.HP\.android\build-
cache\bf0ee9d089eb4a68c393\output\jars\classes.jar(;;;;;;**.class)] 
(Duplicate zip entry [com/google/android/gms/internal/bs.class == 
classes.jar:com/google/android/gms/internal/zzas.class]))

build.gradle file:

 android {
    compileSdkVersion 25
    buildToolsVersion "26.0.0"
    defaultConfig {
        applicationId "com.ardent.sys.telugulivetv"
        minSdkVersion 17
        targetSdkVersion 25
        versionCode 12
        versionName "2.3.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }

buildTypes {
        release {
            shrinkResources false
            minifyEnabled true

            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

            applicationVariants.all { variant ->
                variant.outputs.each { output ->
                    project.ext { appName = 'Telugu Live TV' }
                    def formattedDate = new Date().format('yyyyMMddHHmmss')
                    def newName = output.outputFile.name
                    newName = newName.replace("app-", "$project.ext.appName-") //"MyAppName" -> I set my app variables in the root project
                    newName = newName.replace("-release", "-release" + formattedDate)
                    //noinspection GroovyAssignabilityCheck
                    output.outputFile = new File(output.outputFile.parent, newName)
                }
            }
        }
    }

    dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile files('libs/YouTubeAndroidPlayerApi.jar')


    compile ('com.adincube.sdk:AdinCube-Java-206ebf:1.+@aar') {
        transitive = true
    }
    compile('com.adincube.sdk:AdinCube-Native-RecyclerView-Extension:1.+') {
        transitive = true
    }
    compile 'com.android.support:appcompat-v7:25.3.1'
    compile 'com.android.support:recyclerview-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:support-v4:25.3.1'

    compile 'com.mcxiaoke.volley:library-aar:1.0.1'

    compile 'com.google.firebase:firebase-crash:11.0.2'
    compile 'com.google.firebase:firebase-core:11.0.2'
    compile 'com.google.firebase:firebase-messaging:11.0.2'

    compile 'com.squareup.picasso:picasso:2.5.2'

    compile 'com.facebook.android:audience-network-sdk:4.+'

    compile 'com.android.support.constraint:constraint-layout:1.0.2'

    compile 'com.google.code.gson:gson:2.8.1'

    testCompile 'junit:junit:4.12'
}


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

Proguard-rules.pro

-keep public class com.google.android.gms.* { public *; }
-dontwarn com.google.android.gms.**
-dontwarn com.squareup.okhttp.**

I read all the related questions, but that doesn't solved my problem. please help me solve this error.


Solution

  • There is a conflict between play-service-ads used by audience-network-sdk facebook module and those used by firebase module. The following will fix it :

    compile('com.facebook.android:audience-network-sdk:4.+') {
        exclude module: 'play-services-ads'
    }
    compile 'com.google.android.gms:play-services-ads:11.0.2'
    

    But after that, you have another conflict (not related to play-sevice this time) :

    com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: com/facebook/ads/AbstractAdListener.class

    This happens because com.adincube.sdk:AdinCube-Java-206ebf includes a dependency to com.adincube.partner:facebook which has the package name com.facebook.ads. I guess it's an unofficial modified package of facebook library. If you are sure you don't need this dependency, you can exclude it :

    compile('com.adincube.sdk:AdinCube-Java-206ebf:1.+@aar') {
        transitive = true
        exclude module: 'facebook'
    }
    

    Otherwise contact adincube.com for instructions about integrating their module with com.facebook.android:audience-network-sdk