2010-04-15 95 views
2

建造我們從螞蟻Android應用程序失敗,出現此錯誤:從Android生成的構建文件生成的Ant失敗 - 如何解決?

[apply] 
    [apply] UNEXPECTED TOP-LEVEL ERROR: 
    [apply] java.lang.OutOfMemoryError: Java heap space 
    [apply]  at java.util.HashMap.<init>(HashMap.java:209) 
    [apply]  at java.util.HashSet.<init>(HashSet.java:86) 
    [apply]  at com.android.dx.ssa.Dominators.compress(Dominators.java:96) 
    [apply]  at com.android.dx.ssa.Dominators.eval(Dominators.java:132) 
    [apply]  at com.android.dx.ssa.Dominators.run(Dominators.java:213) 
    [apply]  at com.android.dx.ssa.DomFront.run(DomFront.java:84) 
    [apply]  at com.android.dx.ssa.SsaConverter.placePhiFunctions(SsaConverter.java:265) 
    [apply]  at com.android.dx.ssa.SsaConverter.convertToSsaMethod(SsaConverter.java:51) 
    [apply]  at com.android.dx.ssa.Optimizer.optimize(Optimizer.java:100) 
    [apply]  at com.android.dx.ssa.Optimizer.optimize(Optimizer.java:74) 
    [apply]  at com.android.dx.dex.cf.CfTranslator.processMethods(CfTranslator.java:269) 
    [apply]  at com.android.dx.dex.cf.CfTranslator.translate0(CfTranslator.java:131) 
    [apply]  at com.android.dx.dex.cf.CfTranslator.translate(CfTranslator.java:85) 
    [apply]  at com.android.dx.command.dexer.Main.processClass(Main.java:297) 
    [apply]  at com.android.dx.command.dexer.Main.processFileBytes(Main.java:276) 
    [apply]  at com.android.dx.command.dexer.Main.access$100(Main.java:56) 
    [apply]  at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:228) 
    [apply]  at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:245) 
    [apply]  at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:130) 
    [apply]  at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:108) 
    [apply]  at com.android.dx.command.dexer.Main.processOne(Main.java:245) 
    [apply]  at com.android.dx.command.dexer.Main.processAllFiles(Main.java:183) 
    [apply]  at com.android.dx.command.dexer.Main.run(Main.java:139) 
    [apply]  at com.android.dx.command.dexer.Main.main(Main.java:120) 
    [apply]  at com.android.dx.command.Main.main(Main.java:87) 

BUILD FAILED 

伊夫試圖通過設置ANT_OPTS =給螞蟻更多的內存「 - Xms256m -Xmx512m」。 (這臺機器有1Gb RAM)。

我只是需要更多的記憶,還是有什麼我可以嘗試?

+0

多少類和資源在那裏在你的項目中?我從來沒有見過這個錯誤。 – CommonsWare 2010-04-15 23:50:53

+0

並不多(儘管我們使用JNI來加載靜態C庫)。 – Eno 2010-04-16 14:08:36

回答

0

我將我們的構建版本移植到Linux上的新Hudson安裝中。問題消失了。

+0

我也有這個問題,這個特殊的解決方案不是問題。任何其他想法? – emmby 2010-06-18 18:04:04

0

嘗試將apply任務的spawn屬性設置爲true,以便每個執行生成爲其自己的進程。你沒地方包括:使用apply任務的build.xml文件的一部分,但它會是這個樣子:

<apply spawn="true" executable="command"> 
    <fileset dir="."/> 
</apply> 

你的想法。

+0

我使用Android生成的build.xml,因此大多數配置都是從android_rules.xml中提取的,我的構建文件大部分是空的。 – Eno 2010-04-16 14:05:45

+0

這裏同樣的問題。任何其他解決方案,除了移動到另一個開箱? – emmby 2010-06-18 18:05:39

3

發現這個鏈接,可以幫助:http://groups.google.com/group/android-beginners/browse_thread/thread/1e0a66a5ab115168

的解決方案似乎是編輯您的DX或dx.bat shell腳本(根據您的平臺),並取消對設置堆大小就行了。

例如,

vi $ANDROID_SDK/platforms/*/tools/dx 

將讓你編輯每個DX文件在Mac(和可能的Linux)。

然後取消對javaOpts行說像以下:

# If you want DX to have more memory when executing, uncomment the following 
# line and adjust the value accordingly. Use "java -X" for a list of options 
# you can pass here. 
# 
# javaOpts="-Xmx256M" 

這顯然不是一個理想的解決方案,因爲你的改變將得到重挫每次更新Platform SDK中。但它確實爲我做了訣竅。

+0

沒有這樣的文件夾**/tools/dx **了。 – 2016-08-23 16:37:06

0

您可以通過ant將堆參數傳遞給dex。

<apply executable="${dx}" failonerror="true" parallel="true"> 
      <arg value="-JXmx4096M" /> 
      <arg value="--dex" /> 
      <arg value="--multi-dex" /> 

-JXmx4096M將被解析並設置爲dex進程的堆大小。請參閱shell腳本dex。

0

我已經通過編輯d解決了這個問題:\ java的\ Android的SDK-WINDOWS \集結工具\ 19.1.0 \ dx.bat(Window環境)

set defaultXmx=-Xmx3072M 
set defaultXss=-Xss512m