Android-сборка с ошибкой jmDNS

ПРЕАМБУЛА: с 16-го уровня SDK у Android есть встроенная реализация Zeroconf. Если не требуется совместимость с бронзовым возрастом, больше не используйте jmDNS, вместо этого используйте NsdManager .


PREAMBLE # 2: ранние версии NsdManager полны сбоев, см. Вопрос SO. GetSystemService (Context.NSD_SERVICE) замораживает эмулятор 5.0 и связанные записи ошибок.


Я добавил jmDNS 3.4.1 в свой Android-проект. Скопировал JAR под lib , затем в разделе «Java BuildPath» / Libraries добавлена ​​ссылка.

Теперь моя сборка завершилась неудачей со следующим сообщением в консоли:

 [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 

И когда я смотрю содержимое JAR в обозревателе пакетов в ссылочных библиотеках, я вижу, что каждый класс под каждым пакетом в jmdns.jar указан дважды. Две копии JmDNS.class, две копии JmmDNS.class и т. Д.

Какие-нибудь идеи, что не так с банкой? Я использую другие баночки в проекте, ни один из них не действует таким образом. Пробовал очистить несколько раз, удалил и снова добавил JAR – тот же эффект.

Возможно, стоит отметить, что это проект библиотеки, и появляется ошибка при создании приложения, которое ссылается на библиотеку.

Вероятно, вы использовали .jar из SourceForge. Эта версия имеет все файлы .class дважды в .jar, и это приводит к вашей ошибке.

Попробуйте использовать .jar из Maven http://search.maven.org/#browse|1991004139 , это должно сработать, я использовал его в начале этого месяца.

Посмотрите, помогает ли здесь ответ.

Вообще говоря, файл jar с домашней страницы SourceForge неверен и не работает с Android, попробуйте использовать ту, что находится в центральном репозитории Maven , или грязный обходной путь, упомянутый в этом сообщении в блоге .

Intereting Posts