Android构build与jmDNS失败

前言:由于SDK级别16,Android有一个内置的Zeroconf实现。 除非青铜时代兼容性是一个问题,否则不要使用jmDNS,而应使用NsdManager


前言#2:早期版本的NsdManager充满了小故障,看到这个问题getSystemService(Context.NSD_SERVICE)冻结了5.0仿真器和链接的错误logging。


我已经添加了jmDNS 3.4.1到我的Android项目。 在lib下复制了JAR,然后在“Java BuildPath”/ Libraries下添加了一个引用。

现在我的编译失败,并在Console中显示以下消息:

 [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 

当我查看引用库下的包资源pipe理器中的JAR内容时,我看到jmdns.jar中每个包下的每个类都被列出了两次。 两个JmDNS.class副本,两个JmmDNS.class副本,等等。

任何想法的jar有什么问题? 我在项目中使用其他jar子,没有一个这样做。 尝试清洗几次,删除并重新添加JAR – 相同的效果。

值得注意的是,这是一个库项目,当我构build引用库的应用程序时,popup错误。

Solutions Collecting From Web of "Android构build与jmDNS失败"

你可能使用SourceForge中的.jar。 该版本在.jar中有两次.class文件,这会导致错误。

尝试使用来自Maven http://search.maven.org/#browse | 1991004139的.jar,这应该是工作,我在本月初使用它。

看看这里的答案是否有帮助。

一般来说, SourceForge主页中的 jar文件格式不正确,不适用于Android,请尝试使用Maven Central Repository中的 jar文件或本博客文章中提到的肮脏的解决方法。