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.
- Android pesadilla proguard
- El método debe anularse en si se llama "en Android Studio
- Proguard mess Javascript Funciones de interfaz al orientar SDK en Android Manifiesto por encima de 17
- Configuración de Google Play Services v23 Proguard
- ¿Necesita especificar las opciones -injars y -outjars en las versiones de ProGuard para Android?
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!
- Eliminar las clases no utilizadas con proguard para Android
- Excluir paquetes de proguard
- proguard no mantener clase anónima
- ¿Cómo comentas una regla en Proguard.cfg?
- Proguard warning biblioteca clase android.webkit.WebView depende de la clase del programa android.webkit.WebViewClien
- Android Roboguice proguard warning
- Copia automática de Android Proguard mapping Android Studio
- Usar Proguard sólo para deshabilitar el registro y para reducir recursos
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!
- No conseguir el pulgar con géneros – jugador de música universal
- ¿Cómo hago que un escáner de huellas digitales USB esté conectado a un teléfono móvil / tablet con éxito?