Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Prograurd Duplicate zip entry

I have a problem with signing and releasing an APK. I get Duplicate zip entry warnings and one error, Here is the code:

Information:Gradle tasks [:app:assembleRelease]
Warning:can't write resource [META-INF/MANIFEST.MF] (Duplicate zip entry [gcm.jar:META-INF/MANIFEST.MF])
Warning:can't write resource [META-INF/MANIFEST.MF] (Duplicate zip entry [gson-2.2.4.jar:META-INF/MANIFEST.MF])
Warning:can't write resource [META-INF/MANIFEST.MF] (Duplicate zip entry [httpmime-4.2.2.jar:META-INF/MANIFEST.MF])
Warning:can't write resource [META-INF/MANIFEST.MF] (Duplicate zip entry [joda-time-2.1.jar:META-INF/MANIFEST.MF])
Warning:can't write resource [META-INF/LICENSE.txt] (Duplicate zip entry [joda-time-2.1.jar:META-INF/LICENSE.txt])
Warning:can't write resource [META-INF/NOTICE.txt] (Duplicate zip entry [joda-time-2.1.jar:META-INF/NOTICE.txt])
Warning:can't write resource [META-INF/MANIFEST.MF] (Duplicate zip entry [splunk-mint-4.2.1.jar:META-INF/MANIFEST.MF])
Warning:can't write resource [META-INF/MANIFEST.MF] (Duplicate zip entry [universal-image-loader-1.9.4.jar:META-INF/MANIFEST.MF])
Warning:can't write resource [META-INF/MANIFEST.MF] (Duplicate zip entry [classes.jar:META-INF/MANIFEST.MF])
Warning:can't write resource [META-INF/MANIFEST.MF] (Duplicate zip entry [support-annotations-24.0.0.jar:META-INF/MANIFEST.MF])
Warning:can't write resource [META-INF/MANIFEST.MF] (Duplicate zip entry [classes.jar:META-INF/MANIFEST.MF])
Error:Execution failed for task ':app:transformClassesWithMultidexlistForRelease'.
> java.io.IOException: Can't write [D:\Android\Android_Project\myapp\app\build\intermediates\multi-dex\release\componentClasses.jar] (Can't read [C:\Users\Amir Mahmoud\.android\build-cache\3936c6cf75e73634f829890fcc2030092ab8dabe\output\jars\classes.jar] (Duplicate zip entry [classes.jar:android/support/v4/view/ViewCompat$ICSViewCompatImpl.class]))

I even tried adding packaging options to the gradle but it did not work this is my gradle code:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"
    useLibrary  'org.apache.http.legacy'
    defaultConfig {
        applicationId "com.company.myapp"
        minSdkVersion 14
        targetSdkVersion 21
        versionCode 70
        versionName "7.4"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        multiDexEnabled true
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    packagingOptions {
        exclude 'META-INF/MANIFEST.MF'
        exclude 'META-INF/NOTICE.txt'
    }
    lintOptions {
        checkReleaseBuilds false
        // Or, if you prefer, you can continue to check for errors in release builds,
        // but continue the build even when errors are found:
        abortOnError false
    }
}

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 'com.android.support:appcompat-v4:25'
    testCompile 'junit:junit:4.12'
    //    compile fileTree(include: '*.jar', dir: 'libs')
    compile 'com.google.android.gms:play-services:10.2.1'
    //    compile "com.google.android.gms:play-services-gcm:10.2.1"
    //    compile 'org.apache.httpcomponents:httpmime:4.5.3'
    //    compile files('libs/gson-2.2.4.jar')
    //    compile files('libs/httpmime-4.2.2.jar')
    //    compile files('libs/joda-time-2.1.jar')
    //    compile files('libs/universal-image-loader-1.9.4.jar')
//    compile files('libs/android-support-v4.jar')

}

I am stuck on this project for a few days and I don't know what to do with it, any helps are welcomed.

like image 579
Amir Ebrahimi Avatar asked Apr 19 '17 12:04

Amir Ebrahimi


1 Answers

In addition to Jared’s answer, if you receive an error about a duplicate .class file(s), not just the META-INF/ files, you may need to exclude the offending module that includes the duplicate .class file(s).

You will need to identify which dependency is including the module with the duplicate .class entries and exclude that module from said dependency.

You can use the Gradle command: ./gradlew app:dependencies to list the complete dependency graph. Where “app:” is the name of your project's module/app.

After using the ./gradlew app:dependencies command you should look through the list of dependencies and find the one that is including the offending module with the duplicate .class entries.

As an example, lets say that com.android.support:support-v4 is the module with the duplicate classes that are causing these errors. Here's how to exclude that duplicate module from your dependency:

//Your dependency that includes the module with the duplicates.
compile('com.my.project:my-module:0.1') {
        //exclude the offending module so there won’t be duplicates.
        exclude module: 'support-v4'
        //maybe you need to exclude a group also?...
        exclude group: 'com.google.android.gms'
    }
like image 95
Sakiboy Avatar answered Sep 21 '22 00:09

Sakiboy