为什么在为iOS打包Adobe AIR应用程序(.IPA)时FDT显示Java堆错误

我正在使用Adobe AIR创build一些Flash游戏。 我尝试编译成.ipa文件(在iPad设备上运行)。

该项目并不大,但也不小(它使用6个库和很多没有预编译的代码)。 我尝试用这两种方法打包Flash FDT 5.5的游戏:

  • – 工作好,但performance是可怕的;
  • 标准 – 我的编译完成以下错误:

包装失败! 打包错误消息:拾取JAVA_TOOL_OPTIONS:-Xmx3072M线程“main”中的exceptionjava.lang.OutOfMemoryError:在java.util.TreeMap.put(未知源)上的Java堆空间,位于adobe.abc.Algorithms $ SetMap.get(Algorithms。 java:225)at adobe.abc.Algorithms.addUsers(Algorithms.java:164)at adobe.abc.Algorithms.findUses(Algorithms.java:186)at adobe.abc.GlobalOptimizer.cp(GlobalOptimizer.java:9381)at adobe.abc.GlobalOptimizer.dce(GlobalOptimizer.java:9627)at adobe.abc.GlobalOptimizer.sccp(GlobalOptimizer.java:4638)at adobe.abc.GlobalOptimizer.optimize(GlobalOptimizer.java:3514)at adobe.abc.GlobalOptimizer 。在adobe.abc.LLVMEmitter.optimizeABCs(LLVMEmitter.java:527)处,在adobe.abc.LLVMEmitter.generateBitcode(LLVMEmitter.java:337)处,在com.adobe.air.ipa.AOTCompiler处优化(GlobalOptimizer.java:2215)。 convertAbcToLlvmBitcodeImpl(AOTCompiler.java:510)at com.adobe.air.ipa.BitcodeGenerator.main(BitcodeGenerator.java:80)拾取JAVA_TOOL_OPTIONS:-Xmx3072M执行时编译失败: ADT拾取了JAVA_TOOL_OPTIONS:-Xmx3072M拾取了JAVA_TOOL_OPTIONS:-Xmx3072M

我知道这是Eclipse开发的常见问题。 我试图以标准方式解决 – >增加java堆大小。 正如你所看到的,我已经设置了3072M,这应该足够了。

当我尝试编译较小的项目时,它工作正常。 我不知道现在该做什么:(。任何想法?

深入调查后,我find了一个解决scheme。 这不是由于任何环境configuration,但是,正如@Alan所说,Adobe的包装商遇到了问题。 正如我所想的那样,在“最优化”阶段遇到问题。

这是一个非常有用的论坛主题: http : //forums.adobe.com/message/4445973#4445973

我的项目是使用NAPE物理引擎。 正如我在那里发现的: http : //deltaluca.me.uk/forum/index.php/m/2148/0ce4c49cc2c79979154c56737d2978a4/人遇到编译时间的问题。 在我的情况下,编译时间是无穷的;),什么以java的内存不足exception结束。 解决scheme是使用最新的NAPE构build,这是由作者稍微优化。 这个“小的优化”使我的项目工作。

总结一下:如果你有类似的问题,只需检查你的代码。 试图find一些巨大的function/方法,Adobe的打包者发现很难优化。

-Xmx3072M不是有效的Eclipse参数。 恢复您的'eclipse.ini'设置和其他Java设置为默认值,它应该工作。 您可能会将其设置得过高,导致JVM的其他部分内存不足。

从堆栈跟踪中可以看出,这不是Eclipse或FDT问题。 Adobe的打包程序遇到了问题。 如果默认仍然不起作用,那么请参阅关于给予Java更多内存。 如果这不起作用,请慢慢增加Eclipse的内存以查看是否有效。