将jar导入到android项目时出错

时间:2013-12-24 07:08:13

标签: java android eclipse jar

我在将apache xerces.jar放入构建路径时遇到错误。

我之前搜索过错误..并且描述的解决方案是针对冲突的jar ..但是这里不是这样的情况..我得到一些ParserException因为坏的utf-8

我尝试过(但没有运气):

  • 清理项目
  • 重启eclipse
  • 更新adt,sdk
  • 删除所有lib并修复proj属性然后导入 xerces解决冲突
  • 加上我只有一个外部lib xerces

来自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

3 个答案:

答案 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

上找到文档

Official Android Tutorial