Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Duplicate Zip Entry after Gradle Plugin v0.13.1

I've been using the Gradle Android plugin v0.12 but I decided to upgrade to the new version, because I needed the new functionality (and the improved speed is always a plus).

After updating to the new v0.13.1, I keep getting the "Duplicate Zip Entry" (from Proguard) while everything worked before. The full error:

java.io.IOException: Can't write [/Users/.../classes-proguard/netherlands/release/classes.jar] (Can't read [/Users/.../.gradle/caches/modules-2/files-2.1/org.apache.commons/commons-io/1.3.2/b6dde38349ba9bb5e6ea6320531eae969985dae5/commons-io-1.3.2.jar(;;;;;;!META-INF/MANIFEST.MF)] (Duplicate zip entry [commons-io-1.3.2.jar:org/apache/commons/io/CopyUtils.class])) (CopyUtils was FileUtils before).

I'm using following packaging options: packagingOptions

{ 
   exclude 'AndroidManifest.xml' 
   exclude 'META-INF/DEPENDENCIES' 
   exclude 'META-INF/notice.txt' 
   exclude 'META-INF/license.txt' 
   exclude 'META-INF/LICENSE.txt' 
   exclude 'META-INF/NOTICE.txt' 
   exclude 'META-INF/MANIFEST.MF' 
   exclude '!META-INF/MANIFEST.MF' 
   exclude 'META-INF/services/javax.annotation.processing.Processor' 
}

As you can tell, I'm excluding the manifest files...

Just to test it, I changed back to version 0.12.0 and everything works again, back to 0.13.* and it breaks (but I need 0.13.*)!

Further, I'm using the following libraries:

  1. Robospice
  2. Retrofit
  3. OkHttp
  4. Dart
  5. Icepick
  6. Butterknife
  7. Crouton
  8. SmoothProgressBar
  9. NineoldsAndroid (in library of BetterPickers)

Did anyone encounter this issue too? If so, can anyone please help me out (been breaking my head for 2 days on this issue now!)? Thanks!

like image 935
Superplastik Avatar asked Sep 26 '14 12:09

Superplastik


3 Answers

I had the same issue when updating to Android Gradle plugin 0.13. I managed to fix it by including retrofit this way in my build.gradle file:

compile('com.squareup.retrofit:retrofit:1.6.1') {
    exclude group: 'commons-io', module: 'commons-io'
}

Edit: And can do this on all retrofit and robospice dependcies at once with:

compile('com.octo.android.robospice:robospice-retrofit:1.4.14') {
    exclude group: 'commons-io', module: 'commons-io'
}

It will get all underlying dependencies automatically (retrofit, robospice-core, robospice-cache, ...).

like image 57
Gaëtan Avatar answered Sep 22 '22 22:09

Gaëtan


I had the same issue. In my case I hadn't done a build for a few months, and found that the dependency compile 'org.apache.commons:commons-io:1.3.2' is no longer valid (though I guess the jars were still in my local repository).

Once I changed it to compile 'commons-io:commons-io:1.3.2', proGuard ran fine.

like image 34
CjS Avatar answered Sep 25 '22 22:09

CjS


By Using CjS answer I was able to solve this. Even Gaetan Answer is also works.

Adding to this I solved the Issue by Using This, if your compileSdkVersion is 19(IN MY CASE)

compile ('org.apache.httpcomponents:httpmime:4.3'){
    exclude group: 'org.apache.httpcomponents', module: 'httpclient'
}
compile ('org.apache.httpcomponents:httpcore:4.4.1'){
    exclude group: 'org.apache.httpcomponents', module: 'httpclient'
}
compile 'commons-io:commons-io:1.3.2'

else if your compileSdkVersion is 23 then use

android {
useLibrary 'org.apache.http.legacy'
packagingOptions {
    exclude 'META-INF/DEPENDENCIES'
    exclude 'META-INF/NOTICE'
    exclude 'META-INF/LICENSE'
    exclude 'META-INF/LICENSE.txt'
    exclude 'META-INF/NOTICE.txt'
    }
}
like image 26
Sophia Avatar answered Sep 22 '22 22:09

Sophia