Android源码编译GC overhead limit exceeded. Try increasing heap size with java option '-Xmx'

     现在编译源码已经成了家常便饭了,基本上定期对公司每个项目的主线代码进行同步,然后晚上下班前开启编译,防止有的问题单别人已经修改了,自己还在这花时间修改,但是这两天真是奇怪,同一套编译环境,amber、s2、x10其他几个项目都是好好的,唯独x3项目每次编译都不通过,报的错误基本都一样:GC overhead limit exceeded
Try increasing heap size with java option '-Xmx'

     具体的日志内容如下:

Warning: AndroidManifest.xml already defines versionCode (in http://schemas.android.com/apk/res/android); using existing value in manifest.
Warning: AndroidManifest.xml already defines versionName (in http://schemas.android.com/apk/res/android); using existing value in manifest.
Warning: AndroidManifest.xml already defines minSdkVersion (in http://schemas.android.com/apk/res/android); using existing value in manifest.
target Package: LetvTeleExtra (out/target/product/x500/obj/APPS/LetvTeleExtra_intermediates/package.apk)
Building with Jack: out/target/common/obj/APPS/LetvUserManual_intermediates/with-local/classes.dex
GC overhead limit exceeded
Try increasing heap size with java option '-Xmx'
Warning: This may have produced partial or corrupted output.
make: *** [out/target/common/obj/APPS/LetvNote_intermediates/with-local/classes.dex] Error 41
make: *** Waiting for unfinished jobs....
GC overhead limit exceeded
Try increasing heap size with java option '-Xmx'
Warning: This may have produced partial or corrupted output.
make: *** [out/target/common/obj/APPS/LetvUserManual_intermediates/with-local/classes.dex] Error 41
GC overhead limit exceeded
Try increasing heap size with java option '-Xmx'
Warning: This may have produced partial or corrupted output.
make: *** [out/target/common/obj/APPS/Music_intermediates/with-local/classes.dex] Error 41


#### make failed to build some targets (03:14:18 (hh:mm:ss)) ####

     

     从日志上理解,就是虚拟机内存不足了,然后各种google、百度,找到的比较符合的答案就两个,

     GC overhead limit exceeded when building android source

     Android source code compile error: “Try increasing heap size with java option '-Xmx'”

     然而对照自己的编译环境看了下,和这个的jack配置不一样,真是头大了,对编译环境自己又不懂,不过在x3m/prebuilts/sdk/tools目录下还是找到了传说中的jack-admin文件,路径如下图:

Android源码编译GC overhead limit exceeded. Try increasing heap size with java option '-Xmx'_第1张图片

     但是在里边没有找到任何环境变量配置相关的选项,好吧,继续找,又找到x3m/build/core/config.mk文件,这个看着好像还比较靠谱,应该是管理配置相关的,打开之后,找到了java -Xmx3500m的配置项,哇,如获至宝!!

Android源码编译GC overhead limit exceeded. Try increasing heap size with java option '-Xmx'_第2张图片

     这里说一下哈,它最原始的配置是3500,是我自己手动改为5500的。改完之后,再重新make一下,结果不对,还是一样报错,真是郁闷。源码编译不过,bug没办法处理,工作都停下了,不行,一定要解决这个问题才能继续。

     第二天来,在大群里一发,真是各种热心啊,好几个同事联系我,给予解决方案。当然,自己对这个问题产生的根本原因和最好的解决方案还没有完全搞清,但是问题解决了,所以把几种可能方案都列出来,方便大家遇到时能够得到一些帮助,要知道,发现问题但是手足无措时那种感觉真是难受。

     1:有的同事推荐将出错的模块单独编译一下,比如我当前的编译出错的是Note、UserManual、Music三个模块,就把它们单独编译一下,然后再make整体编译

     2:vim ~/.jack,然后将SERVER_NB_COMPILE=1 改为1,注意它的默认值为4

    SERVER_NB_COMPILE是控制多任务并行的控制编译器行为,经常会引起这个错误。SERVER_NB_COMPILE=4 Maximum number of parallel compilations allowed.  这个内存不足默认配置4,容易报这个问题。我这里的问题就是采用这种方案处理OK了。

     还需要多说一下,中途如果编译出错,千万不要make clean,而是修改配置后,继续make,这样就会继续之前的工作,如果你make clean后,那就相当于重新开始了,那就又要花大概三个小时了。

     大家如果想学习一下android的编译系统原理的话,可以去看看老罗的博客。老的博客每篇都是精品,讲的非常细致:

     Android编译系统简要介绍和学习计划

     Android编译系统环境初始化过程分析

     Android源代码编译命令m/mm/mmm/make分析

     Android系统镜像文件的打包过程分析

     从CM刷机过程和原理分析Android系统结构

     展示一下我的结果,哇哈哈哈哈,又可以开始干活了!!!

Android源码编译GC overhead limit exceeded. Try increasing heap size with java option '-Xmx'_第3张图片

你可能感兴趣的:(Android框架总结,android,framework,Android反编译,framework,android,makefile,源码)