Advertencias de Proguard "no se puede escribir recurso (entrada de zip duplicado)"

Estoy utilizando IntelliJ y ejecutar Proguard en modo de depuración, pero no puedo parecer deshacerse de las advertencias, tales como:

ProGuard: [MyApplication] Warning: can't write resource [META-INF/MANIFEST.MF] (Duplicate zip entry [android-support-v13.jar:META-INF/MANIFEST.MF]) 

Este proyecto tiene un par de módulos y android-support-v13.jar está siendo utilizado en 2 de ellos. Pensé que era el problema así que quité esa biblioteca de la carpeta de los libs, la agregué como biblioteca del proyecto y agregé la dependencia a ambos módulos. Eso no solucionó nada, la advertencia persiste y no entiendo por qué.

Sé que estas advertencias no afectan nada, pero una construcción limpia es una construcción feliz!

Posiblemente un problema 'proguard.cfg'. ¿Incluye algún '-injars'? Si su proyecto incluye otro proyecto como una biblioteca, los tarros se pueden procesar dos veces. ¿Podría publicar su 'proguard.cfg'?

Extracto de http://proguard.sourceforge.net/index.html#manual/troubleshooting.html :

Sus tarros de entrada contienen varios archivos de recursos con el mismo nombre. ProGuard continúa copiando los archivos de recursos como de costumbre, omitiendo cualquier archivo con nombres usados ​​anteriormente. Una vez más, la advertencia puede ser una indicación de algún problema sin embargo, por lo que es aconsejable eliminar los duplicados. Una manera conveniente de hacerlo es especificando filtros en los tarros de entrada. No hay ninguna opción para desactivar estas advertencias.

OPCIÓN 1:

Como no puedes publicar tus '-injars', comprueba si incluyen 'android-support-v13.jar' o la biblioteca incluida en tu proyecto que también incluye 'android-support-v13.jar'.

Suponiendo que está construyendo con Ant dentro de IntelliJ IDEA, no debe agregar opciones -injars, -outjars o -libraryjars; El guión Ant ya lo hace por ti.

OPCION 2:

Aunque las advertencias son inofensivas, una compilación limpia es una compilación feliz, así que intenta:

http://www.dancartoon.com/2012/01/14/fixing-proguard-warning-cant-write-resource-meta-infmanifest-mf/

y

https://gist.github.com/paulpv/4439012

OPCIÓN # 3:

Incluir (!META-INF/MANIFEST.MF) después de cada comando '-injars'

 -injars library.jar(!META-INF/MANIFEST.MF) 

OPCIÓN # 4: Definición Duplicate de Android Proguard

Solucionado esto moviendo las bibliotecas de terceros a otro directorio, en mi caso 'lib'. Luego añadido

 -injars lib/jmdns.jar 

Al archivo proguard.cfg.

OPCIÓN # 5: Android – Errores duplicados de la entrada de zip de Proguard

Si su archivo de configuración Proguard incluye la línea siguiente, quítela:

 -injars bin/classes 

OPCIÓN # 6: Aplicación Android obfuscate utilizando proguard mantiene obfuscating frascos de la biblioteca – o es?

Encontré otra forma de hacer que Proguard dejara los jarros de la biblioteca solos para pedirle que preservara sus nombres de paquetes, por ejemplo:

-mantener clase javax. ** {*; } -generación clase org. ** {*; } -guardar clase twitter4j. ** {*; }

OPCIÓN # 7:

Una solución extraña (borrar la carpeta META-INF en la carpeta src) a algo similar aquí .

La mejor solución que encontré fue copiar el objetivo -obfuscate de /tools/ant/build.xml en custom_rules.xml de su proyecto. Entonces el único bloque que necesita ser cambiado es:

 <pathconvert property="project.all.classes.value" refid="project.all.classes.path"> <firstmatchmapper> <regexpmapper from='^([^ ]*)( .*)$$' to='"\1\2"(!META-INF/MANIFEST.MF)'/> <identitymapper/> </firstmatchmapper> </pathconvert> 

El único bit añadido es (!META-INF/MANIFEST.MF) . Esto excluirá todos los archivos de manifiesto, que no se copiarán en el APK final de todos modos.

He utilizado packagingOptions con exclude en build.gradle , y tengo los mismos problemas con usted.

Puedes arreglarlo usando esto.

 packagingOptions { pickFirst 'META-INF/services/javax.annotation.processing.Processor' pickFirst 'META-INF/DEPENDENCIES.txt' pickFirst 'META-INF/DEPENDENCIES' pickFirst 'META-INF/LICENSE.txt' pickFirst 'META-INF/LICENSE' pickFirst 'META-INF/NOTICE.txt' pickFirst 'META-INF/NOTICE' pickFirst 'META-INF/LGPL2.1' } 

Reemplazar pickFirst con exclude .

No haga referencia a la biblioteca de soporte incluyendo su tarro directamente; Al hacer esto, el sistema de compilación no puede desambiguar entre varias versiones de la misma, y ​​obtendrá errores de este tipo. Incluirlo haciendo referencia a sus coordenadas de Maven:

Dependencies {compile 'com.android.support:support-v13:XXX'} donde XXX es el número de versión adecuado basado en la API que está compilando. Si incluye esta dependencia a través de la interfaz de usuario en Estructura del proyecto> (su módulo)> Dependencias> + Botón> Dependencia de la biblioteca, le ayudará a elegir el número de versión correcto.

También puede resultar conveniente incluir otras dependencias a través de coordenadas de Maven en lugar de disputar sus jarras; Esa misma interfaz de dependencia de biblioteca tiene una función de búsqueda que le ayuda a encontrar bibliotecas.

Asegúrese de quitar esta biblioteca de las librerías o cualquier otra carpeta que estaba presente dentro

Add -dontwarn to proguard.cfg para ignorar las advertencias

  • La exportación de Eclipse firmada APK falla con SDK 12 y LÍMITE DE COMPATIBILIDAD
  • Proguard - referencias no resueltas a los miembros de la clase del programa
  • Android Studio - ProGuard IOException Duplicate Zip Entry
  • Proguard dando "Warning: org.msgpack. *"
  • ¿Cómo "ejecutar" una aplicación de Android exportada mediante Eclipse + Proguard?
  • Error de android.support.v8.renderscript en ProGuard
  • Con ProGuard, ¿cuál es el impacto en la estrategia de pruebas?
  • Crashlytics ProGuard duplicate zip entry
  • Prácticas recomendadas para almacenar claves API privadas en Android
  • ¿Cómo generar proguard-android.txt automáticamente?
  • NoSuchMethodError para VideoView.setOnPreparedListener ()
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.