PREÁMBULO: desde el nivel 16 de SDK, Android tiene una implementación Zeroconf incorporada. A menos que la compatibilidad con la edad del bronce sea una preocupación, no use jmDNS nunca más, use NsdManager
en su lugar.La compilación de Android con jmDNS falla
PREÁMBULO # 2: las primeras versiones de NsdManager están llenos de fallos, ver a cuestionar getSystemService(Context.NSD_SERVICE) freezes the 5.0 emulator 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"/Bibliotecas agregó una referencia.
Ahora mi generación falla con el mensaje siguiente en la 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 miro a los contenidos JAR en el Explorador de paquetes bajo referenciados Bibliotecas, veo que cada clase bajo cada paquete en las JmDNS. jar aparece dos veces. Dos copias de JmDNS.class, dos copias de JmmDNS.class, y así sucesivamente.
¿Alguna idea de qué pasa con el tarro? Estoy usando otros frascos en el proyecto, ninguno de ellos actúa de esta manera. Intenté limpiar algunas veces, quité y volví a agregar el JAR - el mismo efecto.
Puede valer la pena señalar que este es un proyecto de biblioteca, y el error aparece cuando construyo la aplicación que hace referencia a la biblioteca.
Gracias por el PREÁMBULO. También comencé a usar NsdManager y tuve una experiencia positiva. Me he estado preguntando si NsdManager puede reemplazar por completo a JmDNS. – Hong
NsdManager tiene sus propios problemas: http://stackoverflow.com/questions/27281340/getsystemservicecontext-nsd-service-freezes-the-5-0-emulator –
Al principio tuve algunos problemas, como he comentado allí, pero parece ser estable ahora. ¿Puede NsdManager reemplazar JmDNS en términos de funcionalidad? Usé JmDNS muy brevemente, luego cambié a NsdManager, JmDNS parece tener muchas funciones. – Hong