Proguard warnings “no se puede escribir el recurso (entrada zip duplicada)”

Estoy usando IntelliJ y ejecutando Proguard en modo de depuración, pero parece que no puedo deshacerme de advertencias 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 ese era el problema, así que eliminé esa biblioteca de la carpeta libs, la agregué como biblioteca de proyectos y agregué la dependencia a ambos módulos. Eso no resolvió nada, la advertencia persiste y no entiendo por qué.

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

Posiblemente un problema de ‘proguard.cfg’. ¿Incluye algún ‘-injars’? Si su proyecto incluye otro proyecto como biblioteca, las jarras se pueden procesar dos veces. ¿Podría publicar su ‘proguard.cfg’?

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

Sus archivos de entrada contienen múltiples 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, por lo que es recomendable eliminar los duplicados. Una forma conveniente de hacerlo es mediante la especificación de filtros en los archivos de entrada. No hay opción para desactivar estas advertencias.

OPCIÓN 1:

Como no puede publicar sus ‘-injars’, compruebe si incluyen ‘android-support-v13.jar’ o la biblioteca incluida en su proyecto, que también incluye ‘android-support-v13.jar’.

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

OPCION 2:

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

http://web.archive.org/web/20160206204259/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:

Incluye (!META-INF/MANIFEST.MF) después de cada comando ‘-injars’

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

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

Se corrigió esto al mover las bibliotecas de terceros a otro directorio, en mi caso ‘lib’. Luego se agregó

 -injars lib/jmdns.jar 

al archivo proguard.cfg.

OPCIÓN # 5: Android – Proguard duplicado error de entrada de zip

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

 -injars bin/classes 

OPCIÓN n. ° 6: la aplicación de ofuscación de Android que usa Proguard sigue ofuscando los flasks de la biblioteca, ¿o no?

Encontré otra manera de hacer que Proguard dejara los flasks de la biblioteca solos era pedirle que conservara sus nombres de paquetes, por ejemplo:

-haep class javax. ** {*; } -mantener clase org. ** {*; } -mantener clase twitter4j. ** {*; }

OPCIÓN # 7:

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

build.gradle packagingOptions con exclude en build.gradle , y tengo los mismos problemas contigo.

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' } 

Reemplace pickFirst con exclude .

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

       

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

No haga referencia a la biblioteca de soporte al incluir su jar directamente; Cuando haces esto, el sistema de comstackción no puede eliminar la ambigüedad entre varias versiones de él, y obtienes errores de este tipo. Inclúyalo haciendo referencia a sus coordenadas Maven:

dependencias {compile ‘com.android.support:support-v13:XXX’} donde XXX es el número de versión correcto en función de la API contra la que está comstackndo. Si incluye esta dependencia a través de la interfaz de usuario en Estructura del proyecto> (su módulo)> Dependencias> + Botón> Biblioteca, le ayudará a elegir el número de versión correcto.

También puede resultarle conveniente incluir otras dependencias a través de las coordenadas de Maven en lugar de disputar sus jarras; esa misma IU de dependencia de biblioteca tiene una función de búsqueda para ayudarte a encontrar bibliotecas.

asegúrese de eliminar esta biblioteca de las librerías o cualquier otra carpeta en la que esté presente

agrega -dontwarn a proguard.cfg para ignorar las advertencias