我在将apache xerces.jar放入构建路径时遇到错误。
我之前搜索过错误..并且描述的解决方案是针对冲突的jar ..但是这里不是这样的情况..我得到一些ParserException因为坏的utf-8
我尝试过(但没有运气):
来自here的解决方案
删除xerces会运行proj
几个月前,我通常通过构建路径导入xerces并且它已经工作了。 任何帮助表示赞赏!
[2013-12-24 12:21:44 - 试用] Dx意想不到的顶级异常: com.android.dx.cf.iface.ParseException:错误的utf-8字节a0在偏移处 00000004 com.android.dx.cf.cst.ConstantPoolParser.parseUtf8(ConstantPoolParser.java:374) 在 com.android.dx.cf.cst.ConstantPoolParser.parse0(ConstantPoolParser.java:262) 在 com.android.dx.cf.cst.ConstantPoolParser.parse0(ConstantPoolParser.java:294) 在 com.android.dx.cf.cst.ConstantPoolParser.parse(ConstantPoolParser.java:150) 在 com.android.dx.cf.cst.ConstantPoolParser.parseIfNecessary(ConstantPoolParser.java:124) 在 com.android.dx.cf.cst.ConstantPoolParser.getPool(ConstantPoolParser.java:115) 在 com.android.dx.cf.direct.DirectClassFile.parse0(DirectClassFile.java:482) 在 com.android.dx.cf.direct.DirectClassFile.parse(DirectClassFile.java:406) 在 com.android.dx.cf.direct.DirectClassFile.parseToInterfacesIfNecessary(DirectClassFile.java:388) 在 com.android.dx.cf.direct.DirectClassFile.getMagic(DirectClassFile.java:251) 在com.android.dx.command.dexer.Main.processClass(Main.java:665)at com.android.dx.command.dexer.Main.processFileBytes(Main.java:634)at at com.android.dx.command.dexer.Main.access $ 600(Main.java:78)at com.android.dx.command.dexer.Main $ 1.processFileBytes(Main.java:572) 在 com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:284) 在 com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:166) 在 com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:144) 在com.android.dx.command.dexer.Main.processOne(Main.java:596)at com.android.dx.command.dexer.Main.processAllFiles(Main.java:498)at at com.android.dx.command.dexer.Main.runMonoDex(Main.java:264)at at com.android.dx.command.dexer.Main.run(Main.java:230)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(未知来源)at sun.reflect.DelegatingMethodAccessorImpl.invoke(未知来源)at java.lang.reflect.Method.invoke(未知来源)at com.android.ide.eclipse.adt.internal.build.DexWrapper.run(DexWrapper.java:187) 在 com.android.ide.eclipse.adt.internal.build.BuildHelper.executeDx(BuildHelper.java:786) 在 com.android.ide.eclipse.adt.internal.build.builders.PostCompilerBuilder.build(PostCompilerBuilder.java:597) 在 org.eclipse.core.internal.events.BuildManager $ 2.run(BuildManager.java:733) 在org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:206) 在 org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:328) 在 org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:403) 在 org.eclipse.core.internal.resources.Project $ 1.run(Project.java:618) 在 org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2345) 在 org.eclipse.core.internal.resources.Project.internalBuild(Project.java:597) 在 org.eclipse.core.internal.resources.Project.build(Project.java:124) 在 com.android.ide.eclipse.adt.internal.project.ProjectHelper.doFullIncrementalDebugBuild(ProjectHelper.java:1116) 在 com.android.ide.eclipse.adt.internal.launch.LaunchConfigDelegate.launch(LaunchConfigDelegate.java:147) 在 org.eclipse.debug.internal.core.LaunchConfiguration.launch(LaunchConfiguration.java:858) 在 org.eclipse.debug.internal.core.LaunchConfiguration.launch(LaunchConfiguration.java:707) 在 org.eclipse.debug.internal.ui.DebugUIPlugin.buildAndLaunch(DebugUIPlugin.java:1018) 在 org.eclipse.debug.internal.ui.DebugUIPlugin $ 8.run(DebugUIPlugin.java:1222) 在org.eclipse.core.internal.jobs.Worker.run(Worker.java:53)引起的 by:java.lang.IllegalArgumentException:错误的utf-8字节a0在偏移量 00000004 at com.android.dx.rop.cst.CstString.throwBadUtf8(CstString.java:171)at at com.android.dx.rop.cst.CstString.utf8BytesToString(CstString.java:143) 在com.android.dx.rop.cst.CstString。(CstString.java:200)at com.android.dx.cf.cst.ConstantPoolParser.parseUtf8(ConstantPoolParser.java:371) ......还有43个...在偏移00000afe ...解析cst 012c时 解析cst 00a5在偏移00000316 ...解析时 的>组织/阿帕奇/的xerces / IMPL /的xpath /正则表达式/ ParserForXMLSchema.class
> [2013-12-24 12:21:44 - 试用] Dx 1错误;中止[2013-12-24 12:21:44 - 试用]转换为Dalvik格式失败,错误1
答案 0 :(得分:3)
在你的问题中,你提到:
几个月前,我通常通过构建路径导入xerces并且它已经工作了
这给我带来了红旗,因为对于不断更新的图书馆而言,“月”可能也是一生。也许你的问题不在于jar文件与Eclipse的兼容性,而是jar文件本身的一个问题,它可以用“坏的UTF-8字节”解释你的解析器错误。
根据Apache(http://xerces.apache.org/xerces2-j/install.html)的说法,现在已经弃用了 xerces.jar :
主要发行版中不再提供xerces.jar 。您仍然可以从弃用的发行版中下载此jar。 xerces.jar是一个包含所有解析器类文件的Jar文件(即,它包含xercesImpl.jar和xml-apis.jar的内容的交集)。
因此,在上面列出的同一页面上,我发现您只需要用两个新文件替换xerces.jar: xercesImpl.jar 和 xml-apis.jar 。见下面的摘录(来自上面的相同链接):
Xerces jar文件中的更改:
为了适应Xerces与Xalan等XSLT处理器一起使用的非常常见的情况,在Xerces 2.0.0 beta 3和beta 4之间引入了Xerces的jar文件的默认组织的变化。除了我们仍然生成的xercesSamples.jar文件之外,Xerces以前还带有一个名为xerces.jar的文件。该文件包含所有解析器的功能。 现在包含两个文件:xercesImpl.jar,我们对各种API的实现,以及xml-apis.jar,API本身。这样做是为了,如果您的XSLT处理器附带的API与Xerces-J支持的API相同,则可以避免将xml-apis.jar放在类路径上。
如果您仍然需要/需要使用xerces.jar,Apache提供了一种向后兼容性的方法:
如果您希望使用xerces.jar,我们已经包含了几个Ant目标以实现向后兼容。 “Ant目标”是一个给我们构建工具Ant的参数,它告诉它要应用build.xml文件的哪些部分。
如果您使用的是Windows系统并希望只获取xerces.jar文件,则执行build.bat deprecatedjars。
上面的链接会继续列出您在版本问题时可能遇到的更多潜在问题。如果这解决了您的问题,请告诉我;如果没有,我会继续寻找潜在的解决方案。
答案 1 :(得分:1)
这似乎与最新的ADT有关。自从我更新到ADT 22.6.3后,我遇到了同样的问题,并修复了从构建路径中删除xerces JAR文件,并使用xerces-for-android中的源代码: https://code.google.com/p/xerces-for-android/source/checkout
您只需要使用SVN下载源代码,然后将源代码复制到项目源文件夹中,并更新一些导入。它对我有用。
希望它有所帮助。
答案 2 :(得分:-2)
我建议你删除所有安装新的eclipse并下载最新版本的adt。 最佳实践是使用Android Studio并使用Gradle构建项目。使用Gradle导入您的依赖项,它为您带来了各种各样的功能。 您可以在Vogella tutorial
上找到文档