2012-01-10 14 views
10

Estoy intentando agregar una biblioteca de terceros (JmDNS) a mi proyecto de Android.Android Proguard Duplicate Definition

Creé una carpeta 'libs' en el directorio base del proyecto y dejé caer el archivo jar en el directorio.

Cuando intento construir el proyecto usando Ant (versión ant), recibo una 'definición duplicada' de avisos de lo que parece ser cada clase en el archivo jar JmDNS.

.... 
[proguard] Note: duplicate definition of library class [javax.jmdns.impl.tasks.state.Canceler] 
[proguard] Note: duplicate definition of library class [javax.jmdns.impl.tasks.state.DNSStateTask] 
[proguard] Note: duplicate definition of library class [javax.jmdns.impl.tasks.state.Prober] 
[proguard] Note: duplicate definition of library class [javax.jmdns.impl.tasks.state.Renewer] 
[proguard] Note: duplicate definition of library class [javax.jmdns.impl.tasks.state.package-info] 
[proguard] Note: duplicate definition of library class [javax.jmdns.package-info] 
[proguard] Note: there were 357 duplicate class definitions. 

La construcción también se produce el siguiente error:

BUILD FAILED 
/path/Tools/ant-android-scala/build-scala.xml:183: Can't write [/path/bin/projectname-debug-shrinked.jar] (Can't read [/path/projectname/libs/jmdns.jar(;;;;!META-INF/MANIFEST.MF,!library.properties)] (Duplicate zip entry [jmdns.jar:javax/jmdns/JmDNS$Delegate.class])) 

me he asegurado de que el archivo jar solamente se incluye una vez, y no hay otra manera que yo estoy incluyendo archivos de origen duplicados en cualquier parte del proyecto.

¿Por qué razón Proguard se quejaría de definiciones duplicadas?

+0

una limpieza del proyecto logró arreglarlo para mí (después de intentar un montón de las respuestas sugeridas) parece una versión obsoleta de la lib se mantuvo en la carpeta de compilación o algo – Fonix

Respuesta

12

Lo solucioné moviendo las bibliotecas de terceros a otro directorio, en mi caso 'lib'. Luego se agregó

-injars lib/jmdns.jar 

al archivo proguard.cfg.

Si las lbs de terceros están incluidas en la carpeta 'libs', se procesan dos veces.

+0

Me encontré con el mismo error y lo soluciono de acuerdo con su respuesta - Por cierto, utilizo la ruta completa para jarras en línea -injars ... Gracias por compartir su respuesta. –

+5

O simplemente '-injars libs' – shkschneider

+0

¿Tiene dos carpetas 'lib' y 'libs'? ¿tiene en su gradle 'compile fileTree (dir: 'libs', include: ['* .jar'])'? – NickUnuchek

1

En la versión actual del programa no es necesario especificar injars. Se maneja por defecto. Esto podría deberse a los siguientes motivos:

1) archivos jar duplicados en algunas bibliotecas a las que se hace referencia.

Solución - sacó de la aplicación y que sea una biblioteca de referencia

2) Podría ser debido a diferentes versiones Gradle entre su archivo Gradle aplicación y archivo de Gradle biblioteca referenciada. Hazlo igual.

Solución - Edite el archivo gradle en uno de los archivos gradle de la biblioteca/Project referidos. Ver el classpath es el mismo para ambos proyectos.

dependencies { classpath 'com.android.tools.build:gradle:1.3.0' }

tuve estos dos problemas, rectificó y funcionó.