Android: Errores de clase duplicados en proguard

Al compilar mi aplicación, obtengo el siguiente error (fragmentos sensibles de ruta editados)

Execution failed for task ':app:proguardDebug'. > java.io.IOException: Can't write [/projects/app/build/intermediates/classes-proguard/debug/classes.jar] (Can't read [/.gradle/caches/modules-2/files-2.1/commons-codec/commons-codec/1.4/4216af16d38465bbab0f3dff8efa14204f7a399a/commons-codec-1.4.jar(;;;;;;!META-INF/MANIFEST.MF)] (Duplicate zip entry [commons-codec-1.4.jar:org/apache/commons/codec/binary/Base64.class])) 

Esto me indica que el compilador ve dos lugares donde la aplicación está intentando usar commons.codec.binary.Base64.class como una dependencia. He comprobado y revisado mis bibliotecas de nuevo, pero sólo una biblioteca (Amazon AWS) está intentando utilizarlo.

Por encima de este error, estoy recibiendo algunas otras advertencias que también levantan una bandera roja para mí:

 Warning:can't write resource [META-INF/LICENSE.txt] (Duplicate zip entry [commons-lang3-3.1.jar:META-INF/LICENSE.txt]) Warning:can't write resource [META-INF/NOTICE.txt] (Duplicate zip entry [commons-lang3-3.1.jar:META-INF/NOTICE.txt]) Warning:can't write resource [META-INF/LICENSE.txt] (Duplicate zip entry [commons-codec-1.4.jar:META-INF/LICENSE.txt]) Warning:can't write resource [META-INF/NOTICE.txt] (Duplicate zip entry [commons-codec-1.4.jar:META-INF/NOTICE.txt]) 

No utilizo explícitamente commons-codec-1.4 o commons-lang3-3.1 en mi aplicación, creo que solía usar lang3 antes de eliminarlo más tarde. ¿Por qué se hace referencia a estos en el registro de compilación? ¿Podría una de mis bibliotecas maven usarlas? Voy a incluir una lista de las bibliotecas de maven a continuación en mi archivo gradle.

Aquí están mis archivos proguard y gradle para referencia:

PROGUARD

 -keep class org.w3c.dom.bootstrap.** { *; } -keep class org.joda.time.** { *; } -keep class com.facebook.** { *; } -keep class org.apache.commons.** { *; } -renamesourcefileattribute SourceFile -keepattributes SourceFile,LineNumberTable -dontwarn org.codehaus.jackson.map.ext.** -dontwarn oauth.** -dontwarn com.amazonaws.** -dontwarn org.joda.time.** -dontwarn org.apache.commons.codec.** -dontwarn com.fasterxml.jackson.databind.ext.** 

GRADLE

 apply plugin: 'com.android.application' android { compileSdkVersion 20 buildToolsVersion '20.0.0' defaultConfig { applicationId 'com.my.package' minSdkVersion 14 targetSdkVersion 20 versionCode 9 versionName '1.2' } buildTypes { release { debuggable false runProguard true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' } debug { debuggable true runProguard true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' } } lintOptions { checkReleaseBuilds false } packagingOptions { exclude 'META-INF/LICENSE.txt' exclude 'META-INF/NOTICE.txt' exclude 'META-INF/MANIFEST.MF' } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) //noinspection GradleDependency compile 'com.google.android.gms:play-services:5.0.89' compile 'com.nineoldandroids:library:2.4.0' compile 'com.viewpagerindicator:library:2.4.1@aar' compile 'se.emilsjolander:StickyScrollViewItems:1.1.0' compile 'se.emilsjolander:stickylistheaders:2.5.0' compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.2' compile project(':facebook') compile 'com.tumblr:jumblr:0.0.10' compile 'com.android.support:support-v4:20.0.0' } 

Mi mejor conjetura es una o más de esas bibliotecas está utilizando apache lang3 y codec como dependencias propias, lo que resulta en un conflicto cuando compilar la aplicación. Este problema sólo ocurre cuando incluyo a Amazon como un jar requerido, así que sé que de alguna manera actúa como culpable, pero no sé qué más está en conflicto con él.

Leí algo sobre el uso de -injars con proguard, pero de acuerdo con su documentación de Android no debería necesitar que usted use eso.

Cualquier consejo sería muy apreciado, gracias!

No estoy seguro de si esto te ayudará o no, pero estoy publicando mi respuesta aquí en caso de que otros encuentren esto útil. Mi edición era que tenía 2 referencias en mi declaración de las dependencias. Yo estaba usando la biblioteca Universal Image Loader y mi declaración se parecía a esto:

 dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:22.1.1' compile 'com.android.support:support-v4:22.1.1' compile 'uk.co.chrisjenx:calligraphy:2.0.2' /* UIL was the failing reference */ compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.3' compile 'com.google.android.gms:play-services:7.3.0' } 

El problema con esto me di cuenta de que ya había referenciado UIL a través de la carpeta libs (es decir, ya estaba siendo compilado por la declaración compile fileTree(dir: 'libs', include: ['*.jar']) . Así que fue compilando una vez a través de libs y una vez a través de la llamada explícita para compilar la referencia a UIL. Eliminé la llamada explícita y que aclaró el error. Tal vez usted está llamando a algo en su directorio libs que también contiene un Referencia a la biblioteca ofensiva entonces cuando intenta compilar los Servicios AWS ya tiene una versión de la biblioteca común y pukes.

La causa de este problema es la duplicación de archivos jar.

En el directorio del proyecto, intente encontrar y borrar

/projects/app/build/intermediates/classes-proguard/debug/classes.jar] (No se puede leer [/. Gradle / caches / modules-2 / files-2.1 / commons-codec / commons-codec / 1.4 / 4216af16d38465bbab0f3dff8efa14204f7a399a /commons-codec-1.4.jar

Este archivo jar y ver si algo cambia. Además, si hay commons-lang3-3.1.jar en el mismo o superior dirrectory, intente borrar eso y reconstruir también.

¡Espero eso ayude!

  • ProGuard para Android y GSON
  • Proguard retrace la confusión de salida
  • Proguard elimina el código no utilizado (en Android)
  • El uso de MultiDex en Android App ejecuta ProGuard dos veces y sólo segunda vez con Advertencias / Notas?
  • ProGuard - org.codehaus.jackson.map.JsonMappingException: No se encontró ningún constructor adecuado para el tipo
  • Extraño error NoClassDefFoundError al iniciar una versión firmada APK con proguard habilitado
  • Cómo generar mapping.txt con Eclipse?
  • Android Developer Tools 16 y problemas con -weepclasseswithmembers in proguard
  • ¿Qué tan seguro es proteger contra la ingeniería inversa?
  • * Vs ** vs *** en Proguard?
  • Configurar proguard para excluir jar biblioteca que se extiende android.content.Context
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.