构建Android源码时出现GC超过限制的错误

5
****[ 35% 11837/33004] 构建 out/target/common/obj/JAVA_LIBRARIES/sdk_v21_intermediates/classes.jack 
失败:/bin/bash -c
"
(mkdir -p out/target/common/obj/JAVA_LIBRARIES/sdk_v21_intermediates/)
&& (java -Xmx3500m -jar out/host/linux-x86/framework/jill.jar --output out/target/common/obj/JAVA_LIBRARIES/sdk_v21_intermediates/classes.jack.tmpjill.jack prebuilts/sdk/21/android.jar)
&& (mkdir -p out/target/common/obj/JAVA_LIBRARIES/sdk_v21_intermediates/classes.jack.tmpjill.res)
&& (unzip -qo prebuilts/sdk/21/android.jar -d out/target/common/obj/JAVA_LIBRARIES/sdk_v21_intermediates/classes.jack.tmpjill.res)
&& (find out/target/common/obj/JAVA_LIBRARIES/sdk_v21_intermediates/classes.jack.tmpjill.res -iname \"*.class\" -delete)
&& (JACK_VERSION=2.26.RELEASE out/host/linux-x86/bin/jack @build/core/jack-default.args --verbose error -D jack.import.resource.policy=keep-first -D jack.import.type.policy=keep-first --import out/target/common/obj/JAVA_LIBRARIES/sdk_v21_intermediates/classes.jack.tmpjill.jack --import-resource out/target/common/obj/JAVA_LIBRARIES/sdk_v21_intermediates/classes.jack.tmpjill.res --output-jack out/target/common/obj/JAVA_LIBRARIES/sdk_v21_intermediates/classes.jack)
&& (rm -rf out/target/common/obj/JAVA_LIBRARIES/sdk_v21_intermediates/classes.jack.tmpjill.res)
&& (rm out/target/common/obj/JAVA_LIBRARIES/sdk_v21_intermediates/classes.jack.tmpjill.jack)
" 堆内存溢出 尝试使用Java选项“-Xmx”增加堆大小 警告:这可能会产生部分或损坏的输出。 [ 35% 11837/33004] 使用Jack构建:out/target/common/obj/JAVA_LIBRARIES/core-all_intermediates/with-local/classes.dex 失败:/bin/bash out/target/common/obj/JAVA_LIBRARIES/core-all_intermediates/with-local/classes.dex.rsp 与Jack服务器的通信错误(52) ninja:构建已停止:子命令失败。 build/core/ninja.mk:139: recipe for target 'ninja_wrapper' failed make: *** [ninja_wrapper] Error 1****

这是构建过程停止的错误消息,它说尝试使用Java选项“-Xmx”增加堆大小,但我不知道如何在构建Android源代码时进行配置。


这台机器有多少内存? - Thorbjørn Ravn Andersen
机器的内存大小为4G,也许不足以支持此项目。 - yuiopt
-Xmx3500m可能不会被尊重。我建议先在内存更大的机器上运行,看看是否能够完成。 - Thorbjørn Ravn Andersen
试试这个答案。 https://dev59.com/AFsW5IYBdhLWcg3wdnJh - Jacob Abraham
2个回答

5
似乎是Android makefiles中的一个bug - 3500兆字节真的不足以构建Android内部某些Java包。这是硬编码的值,您可以在build/core/config.mk中找到它。现在,您可以简单地在本地增加它(但奇怪的是它没有放置在某些环境变量中)。
我已将其增加到5500兆字节,它工作得很好。

感谢您的帮助,我在 config.mk 中找到了 -Xmx 选项,但是没有更多的内存可用,也许我应该增加机器的内存。 - yuiopt
1
@yuiopt 是的,高度并行的构建需要相当大的内存 - 您可以增加交换空间和/或减少构建线程的数量。 - Grigoriy Dzhanelidze
你好,我遇到了这个问题,并从文档中找到了这个页面:https://source.android.com/source/jack.html#jack_troubleshooting。此外,在config.mk文件中我没有找到xmx命令,只有这一行:APICHECK_COMMAND := $(APICHECK) -JXmx1024m -J"classpath $(APICHECK_CLASSPATH)"这是你所指的那一行吗? - Poutrathor
请参考https://dev59.com/lVsV5IYBdhLWcg3w-iwC查看更多最近(在Android 6.0中)修复此问题的方法) - icyerasor
@icyerasor 非常感谢,这非常有帮助。 - yuiopt

0

谷歌建议使用至少16GB的内存来构建源代码,我们也经历了在安卓N上这确实是必须的。

除非将16 GB的RAM给予机器,否则源代码构建的可靠性真的会非常低。你可以尝试多个jack-server和参数配置,但它们中的任何一个都可能不可靠。

以下是许多人面临的类似问题的运行线程:- https://code.google.com/p/android/issues/detail?id=194027

我希望这有所帮助!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接