La compilación de Android con jmDNS falla

PREAMBULO: desde el SDK nivel 16, Android tiene una implementación incorporada de Zeroconf. A menos que la compatibilidad de edad de bronce sea una preocupación, no utilice jmDNS más, utilice NsdManager en NsdManager lugar.


PREAMBULO # 2: las primeras versiones de NsdManager están llenas de fallos, vea SO getSystemService (Context.NSD_SERVICE) congela el emulador 5.0 y los registros de errores vinculados.


He añadido jmDNS 3.4.1 a mi proyecto de Android. Copió el JAR bajo lib , luego en "Java BuildPath" / Libraries agregó una referencia.

Ahora mi compilación falla con el siguiente mensaje en Consola:

 [2012-07-27 22:59:07 - Yarxi] Dx UNEXPECTED TOP-LEVEL EXCEPTION: java.lang.IllegalArgumentException: already added: Lcom/strangeberry/jmdns/tools/Browser$1; at com.android.dx.dex.file.ClassDefsSection.add(ClassDefsSection.java:123) at com.android.dx.dex.file.DexFile.add(DexFile.java:163) at com.android.dx.command.dexer.Main.processClass(Main.java:486) at com.android.dx.command.dexer.Main.processFileBytes(Main.java:455) at com.android.dx.command.dexer.Main.access$400(Main.java:67) at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:394) at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:245) at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:131) at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:109) at com.android.dx.command.dexer.Main.processOne(Main.java:418) at com.android.dx.command.dexer.Main.processAllFiles(Main.java:329) at com.android.dx.command.dexer.Main.run(Main.java:206) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at com.android.ide.eclipse.adt.internal.build.DexWrapper.run(DexWrapper.java:180) at com.android.ide.eclipse.adt.internal.build.BuildHelper.executeDx(BuildHelper.java:703) at com.android.ide.eclipse.adt.internal.build.builders.PostCompilerBuilder.build(PostCompilerBuilder.java:577) at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:728) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:199) at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:321) at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:396) at org.eclipse.core.internal.resources.Project$1.run(Project.java:618) at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2344) at org.eclipse.core.internal.resources.Project.internalBuild(Project.java:597) at org.eclipse.core.internal.resources.Project.build(Project.java:124) at com.android.ide.eclipse.adt.internal.project.ProjectHelper.doFullIncrementalDebugBuild(ProjectHelper.java:1000) at com.android.ide.eclipse.adt.internal.launch.LaunchConfigDelegate.launch(LaunchConfigDelegate.java:147) at org.eclipse.debug.internal.core.LaunchConfiguration.launch(LaunchConfiguration.java:854) at org.eclipse.debug.internal.core.LaunchConfiguration.launch(LaunchConfiguration.java:703) at org.eclipse.debug.internal.ui.DebugUIPlugin.buildAndLaunch(DebugUIPlugin.java:937) at org.eclipse.debug.internal.ui.DebugUIPlugin$8.run(DebugUIPlugin.java:1141) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) [2012-07-27 22:59:10 - Yarxi] Dx 1 error; aborting [2012-07-27 22:59:10 - Yarxi] Conversion to Dalvik format failed with error 1 

Y cuando veo el contenido de JAR en el Explorador de paquetes bajo Bibliotecas referenciadas, veo que cada clase bajo cada paquete en jmdns.jar aparece dos veces. Dos copias de JmDNS.class, dos copias de JmmDNS.class, y así sucesivamente.

¿Alguna idea de lo que está mal con el frasco? Estoy usando otros frascos en el proyecto, ninguno de ellos actúan de esta manera. Trató de limpiar un par de veces, retiró y agregó de nuevo el JAR – mismo efecto.

Vale la pena señalar que se trata de un proyecto de biblioteca, y el error aparece cuando construyo la aplicación que hace referencia a la biblioteca.

Probablemente usaste el .jar de SourceForge. Esa versión tiene todos los archivos .class dos veces en el .jar y esto conduce a su error.

Intente usar el .jar de Maven http://search.maven.org/#browse|1991004139 , esto debería funcionar, lo usé a principios de este mes.

Vea si la respuesta aquí ayuda.

En general, el archivo jar de la página principal de SourceForge está malformado y no funciona con Android, intente usar el de Maven Central Repository o la solución sucia mencionada en esta entrada del blog .

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.