2

Windows 7 64ビット(8GB RAM)で実行されているEclipse JunoでAndroidアプリを開発しているので、Androidプロジェクトがあり、いくつかのjarファイルを/ libフォルダーに配置して、アプリで使用できるようにします。Apache xml パーサーの依存関係として必要な xalan.jar ファイルを追加するまでは、これで問題ありません。

携帯電話で実行できるように 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)

私はオンラインで検索してみましたが、私が見つけた最も近いものはスタックオーバーフローの質問でした。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)
4

2 に答える 2

1

私はあなたに決定的な何かを見つけました。www.xom.nuから:

Java 1.3以前にはXMLパーサーが組み込まれていないため、これらの環境では、XOMのサポートライブラリもインストールする必要があります。これらには、xalan.jar、 xercesImpl.jar、normalizer.jar、およびxml-apis.jarが含まれ、libディレクトリにあります。XOMに同梱されているバージョンは、JDKにバンドルされているバージョンよりもかなり高速でバグが少ないため、Java1.4以降でも使用することをお勧めします。例えば、

$ java -classpath xom-samples.jar:xom-1.1.jar:lib / xml-apis.jar:lib / xercesImpl.jar:lib / normalizer.jar:lib /xalan.jarnu.xom.samples.PrettyPrinterファイル名。 xml

nu.xom.xsltのクラスを使用しない場合は、xalan.jarを省略できます。normalizer.jarは、Javaのすべてのバージョンで必要です。ただし、実際には、SerializerのsetUnicodeNormalizationFormC()メソッドでのみ使用されます。このメソッドを呼び出さない場合は、スペースが限られた環境でこのアーカイブを省略できます。junit.jarはテストにのみ使用され、XOMの通常の操作には必要ありません。

したがって、xalan.jarは省略してください。Androidのネイティブjavax.xml.transformは、すべての機能をすでに実行しています(API 8以降)。

ちなみに、他の瓶も落とせるかもしれないようです。

于 2013-01-26T15:03:08.307 に答える
0

このエラーは、JVM のデフォルトの Eclipse 構成が原因である可能性があります。JVM ヒープにさらにスペースを追加してください。

-Xms512M -Xmx2048M

これを達成する方法に関するいくつかの参考文献があります

http://edwards.sdsu.edu/research/index.php/daniel/236-increasing-heap-size-in-eclipse

http://wiki.eclipse.org/FAQ_How_do_I_increase_the_heap_size_available_to_Eclipse%3F

また、ADT プラグインと Android SDK ツールが更新されていることを再確認してください。

于 2013-01-26T03:40:30.367 に答える