Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么xalan.jar在部署android应用程序时会使eclipse崩溃_Android_Eclipse_Out Of Memory_Xalan - Fatal编程技术网

为什么xalan.jar在部署android应用程序时会使eclipse崩溃

为什么xalan.jar在部署android应用程序时会使eclipse崩溃,android,eclipse,out-of-memory,xalan,Android,Eclipse,Out Of Memory,Xalan,我正在EclipseJuno上开发一个android应用程序,运行在Windows7 64位(8GB内存)上,所以我有我的android项目,我将一些jar文件放在/lib文件夹中,以便我可以在我的应用程序中使用它们。这很好,直到我添加xalan.jar文件,它是ApacheXML解析器的依赖项 当我尝试从eclipse运行/部署我的应用程序以便它可以在我的手机上运行时,我开始在控制台中看到编译器警告,抱怨来自xalan.jar的类,然后eclipse崩溃并出现内存不足堆空间异常 !ENTRY

我正在EclipseJuno上开发一个android应用程序,运行在Windows7 64位(8GB内存)上,所以我有我的android项目,我将一些jar文件放在/lib文件夹中,以便我可以在我的应用程序中使用它们。这很好,直到我添加xalan.jar文件,它是ApacheXML解析器的依赖项

当我尝试从eclipse运行/部署我的应用程序以便它可以在我的手机上运行时,我开始在控制台中看到编译器警告,抱怨来自xalan.jar的类,然后eclipse崩溃并出现内存不足堆空间异常

!ENTRY com.android.ide.eclipse.adt 4 0 2013-01-20 21:04:37.427
!MESSAGE Unable to execute dex: Java heap space
!STACK 0
java.lang.OutOfMemoryError: Java heap space
    at com.android.dx.ssa.SsaBasicBlock.getRopLabelSuccessorList(SsaBasicBlock.java:393)
    at com.android.dx.ssa.back.SsaToRop.convertBasicBlock(SsaToRop.java:299)
    at com.android.dx.ssa.back.SsaToRop.convertBasicBlocks(SsaToRop.java:260)
    at com.android.dx.ssa.back.SsaToRop.convert(SsaToRop.java:124)
    at com.android.dx.ssa.back.SsaToRop.convertToRopMethod(SsaToRop.java:70)
    at com.android.dx.ssa.Optimizer.optimize(Optimizer.java:102)
    at com.android.dx.ssa.Optimizer.optimize(Optimizer.java:73)
    at com.android.dx.dex.cf.CfTranslator.processMethods(CfTranslator.java:273)
    at com.android.dx.dex.cf.CfTranslator.translate0(CfTranslator.java:134)
    at com.android.dx.dex.cf.CfTranslator.translate(CfTranslator.java:87)
    at com.android.dx.command.dexer.Main.processClass(Main.java:487)
    at com.android.dx.command.dexer.Main.processFileBytes(Main.java:459)
    at com.android.dx.command.dexer.Main.access$400(Main.java:67)
    at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:398)
    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:422)
    at com.android.dx.command.dexer.Main.processAllFiles(Main.java:333)
    at com.android.dx.command.dexer.Main.run(Main.java:209)
    at sun.reflect.GeneratedMethodAccessor23.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:187)
    at com.android.ide.eclipse.adt.internal.build.BuildHelper.executeDx(BuildHelper.java:745)
    at com.android.ide.eclipse.adt.internal.build.builders.PostCompilerBuilder.build(PostCompilerBuilder.java:598)
    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)
我尝试在线搜索,但我发现最近的一个问题是stackoverflow,它指示增加堆空间内存。从256m到1024,我仍然得到错误

我删除了xalan.jar,一切都正常部署。有什么解决办法吗

-----------编辑-----------------

将最大内存更新到2048后

java.lang.OutOfMemoryError: GC overhead limit exceeded
    at com.android.dx.util.IntList.<init>(IntList.java:87)
    at com.android.dx.rop.code.RopMethod.calcPredecessors(RopMethod.java:174)
    at com.android.dx.rop.code.RopMethod.labelToPredecessors(RopMethod.java:95)
    at com.android.dx.ssa.SsaBasicBlock.newFromRop(SsaBasicBlock.java:158)
    at com.android.dx.ssa.SsaMethod.convertRopToSsaBlocks(SsaMethod.java:174)
    at com.android.dx.ssa.SsaMethod.newFromRopMethod(SsaMethod.java:104)
    at com.android.dx.ssa.SsaConverter.convertToSsaMethod(SsaConverter.java:45)
    at com.android.dx.ssa.Optimizer.optimize(Optimizer.java:99)
    at com.android.dx.ssa.Optimizer.optimize(Optimizer.java:73)
    at com.android.dx.dex.cf.CfTranslator.processMethods(CfTranslator.java:273)
    at com.android.dx.dex.cf.CfTranslator.translate0(CfTranslator.java:134)
    at com.android.dx.dex.cf.CfTranslator.translate(CfTranslator.java:87)
    at com.android.dx.command.dexer.Main.processClass(Main.java:487)
    at com.android.dx.command.dexer.Main.processFileBytes(Main.java:459)
    at com.android.dx.command.dexer.Main.access$400(Main.java:67)
    at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:398)
    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:422)
    at com.android.dx.command.dexer.Main.processAllFiles(Main.java:333)
    at com.android.dx.command.dexer.Main.run(Main.java:209)
    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:187)
    at com.android.ide.eclipse.adt.internal.build.BuildHelper.executeDx(BuildHelper.java:745)
    at com.android.ide.eclipse.adt.internal.build.builders.PostCompilerBuilder.build(PostCompilerBuilder.java:598)
    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)
java.lang.OutOfMemoryError:超出GC开销限制
在com.android.dx.util.IntList上(IntList.java:87)
在com.android.dx.rop.code.RopMethod.calcpredcessors上(RopMethod.java:174)
在com.android.dx.rop.code.RopMethod.labelToPredecessors上(RopMethod.java:95)
位于com.android.dx.ssa.SsaBasicBlock.newFromRop(SsaBasicBlock.java:158)
位于com.android.dx.ssa.SsaMethod.convertroptosablocks(SsaMethod.java:174)
位于com.android.dx.ssa.SsaMethod.newFromRopMethod(SsaMethod.java:104)
位于com.android.dx.ssa.SsaConverter.convertToSsaMethod(SsaConverter.java:45)
位于com.android.dx.ssa.Optimizer.optimize(Optimizer.java:99)
位于com.android.dx.ssa.Optimizer.optimize(Optimizer.java:73)
在com.android.dx.dex.cf.CfTranslator.processMethods上(CfTranslator.java:273)
位于com.android.dx.dex.cf.CfTranslator.translate0(CfTranslator.java:134)
位于com.android.dx.dex.cf.CfTranslator.translate(CfTranslator.java:87)
位于com.android.dx.command.dexer.Main.processClass(Main.java:487)
位于com.android.dx.command.dexer.Main.processFileBytes(Main.java:459)
com.android.dx.command.dexer.Main.access$400(Main.java:67)
位于com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:398)
位于com.android.dx.cf.direct.ClassPathPener.processArchive(classPathPener.java:245)
位于com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:131)
位于com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:109)
位于com.android.dx.command.dexer.Main.processOne(Main.java:422)
位于com.android.dx.command.dexer.Main.processAllFiles(Main.java:333)
位于com.android.dx.command.dexer.Main.run(Main.java:209)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(未知源)
在sun.reflect.DelegatingMethodAccessorImpl.invoke处(未知源)
位于java.lang.reflect.Method.invoke(未知源)
位于com.android.ide.eclipse.adt.internal.build.DexWrapper.run(DexWrapper.java:187)
位于com.android.ide.eclipse.adt.internal.build.BuildHelper.executex(BuildHelper.java:745)
在com.android.ide.eclipse.adt.internal.build.builders.PostCompilerBuilder.builder(PostCompilerBuilder.java:598)
位于org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:728)
位于org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
位于org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:199)

此错误可能是由JVM的默认Eclipse配置引起的。 确保向JVM堆添加更多空间

-Xms512M -Xmx2048M
下面是一些关于如何实现这一点的参考资料


另外,请仔细检查您是否更新了ADT插件和Android SDK工具。

我为您找到了一些明确的信息。从www.xom.nu:

Java 1.3及更早版本没有内置的XML解析器,因此在这些环境中,您还需要安装XOM的支持库。它们包括xalan.jar、xercesImpl.jar、normalizer.jar和xml-api.jar,可以在lib目录中找到。XOM附带的版本比JDK附带的版本要快得多,缺陷也少得多,因此即使在Java1.4及更高版本中,您也可能希望使用它们。比如说,

$java-classpath xom samples.jar:xom-1.1.jar:lib/xml api.jar:lib/xercesImpl.jar:lib/normalizer.jar:lib/xalan.jar nu.xom.samples.PrettyPrinter filename.xml

如果不使用nu.xom.xslt中的任何类,可以省略xalan.jar。所有版本的Java都需要normalizer.jar。但是,它实际上仅由序列化程序中的setUnicodeNormalizationFormC()方法使用。如果不调用此方法,则可以在空间有限的环境中忽略此存档。jar仅用于测试,XOM的正常运行不需要它

所以不要使用xalan.jar。Android的原生javax.xml.transform已经完成了所有这些工作(从API 8开始)


顺便说一句,看起来你也可以扔掉一些其他罐子。

我之前将它增加到1024个,我将它增加到2048个,并使用一个小程序进行了双重检查,如链接中所示。我在libs文件夹中添加了xalan.jar并运行了它。Eclipse崩溃得如此严重,以至于它自己关闭了。从我阅读的所有内容来看,xalan.jar是javax中一个包的实现,它不包含在SDK中。这很可能是导致控制台中出现编译器警告的原因。更正:在Android API 8之前,它不包括在内。所以,如果您的最小构建目标是8或更高,并且您的SDK是最新的,那么这是没有意义的。我的最小目标是API 14。那么您是说API 8及以上不需要xalan.jar和xml-API.jar?更重要的是,我的服务器后端运行在JDK1.6u38上,所以我可能不需要这两个特定的JAR。顺便说一句,我之所以使用它们,是因为我使用的是依赖于它们的XOM(www.XOM.nu)。但是我的droid应用程序在没有xalan和XMLAPI的情况下运行正常。。。如果对你有用的话