解决android在mvn打包的时候,包java.lang.OutOfMemoryError: GC overhead limit exceeded

UNEXPECTED TOP-LEVEL ERROR:
java.lang.OutOfMemoryError: GC overhead limit exceeded
        at com.android.dx.rop.code.PlainInsn.withNewRegisters(PlainInsn.java:152)
        at com.android.dx.ssa.NormalSsaInsn.toRopInsn(NormalSsaInsn.java:126)
        at com.android.dx.ssa.back.SsaToRop.convertInsns(SsaToRop.java:341)
        at com.android.dx.ssa.back.SsaToRop.convertBasicBlock(SsaToRop.java:322)
        at com.android.dx.ssa.back.SsaToRop.convertBasicBlocks(SsaToRop.java:259)
        at com.android.dx.ssa.back.SsaToRop.convert(SsaToRop.java:123)
        at com.android.dx.ssa.back.SsaToRop.convertToRopMethod(SsaToRop.java:69)
        at com.android.dx.ssa.Optimizer.optimize(Optimizer.java:101)
        at com.android.dx.ssa.Optimizer.optimize(Optimizer.java:72)
        at com.android.dx.dex.cf.CfTranslator.processMethods(CfTranslator.java:297)
        at com.android.dx.dex.cf.CfTranslator.translate0(CfTranslator.java:137)

        at com.android.dx.dex.cf.CfTranslator.translate(CfTranslator.java:93)


差不多就是这样的堆栈,类似的还有java.lang.OutOfMemoryError: Java heap space


问题都是一个jvm内存不够。


解决:

因为是mvn包的错,所以第一个想要的是配置环境变量 MAVEN_OPTS,设成 -Xms1024m -Xmx1024m



但这这个法子这里不好用。

因为错误出现在android-maven-plugin的dex这一步。

熟悉的同学可能想到了,dex其实又是执行了一个java -jar的方式,是不是MAVEN_OPTS这个变量没有使用呢?


首先,我们定位到dex文件所在位置。

windows平台: where dx

linux平台:which dx


D:>where dx
D:\Java\adt-bundle-windows-x86_64-20130219\sdk\build-tools\21.1.1\dx.bat


打开dx.bat后发现,果然没有使用MAVEN_OPTS,而是通过自己定义的一个

set defaultXmx=-Xmx1024M


随手改成 set defaultXmx=-Xmx1524,重跑了一次mvn还是不行~


再加上mvn clean package -X看一下,运行dex的时候,还是-Xmx1024

那必然是com.jayway.maven.plugins.android.generation2的android-maven-plugin这个插件其实不是直接调用dx.bat的。


于是乎在翻翻android-maven-plugind的说明文档,

在configuration下加上这么一段

<dex>
	<jvmArguments>
		<argument>-Xms512m</argument>
		<argument>-Xmx1524m</argument>
	</jvmArguments>
</dex>

如图




问题解决。



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值