2016-05-16 58 views
0

我一直遇到类似于this的问题,特别是当gradle运行dex时java.lang.OutOfMemoryError: GC overhead limit exceeded。该解决方案似乎是把它添加到的build.gradle:如何从命令行设置dex内存限制?

android { 
    dexOptions { 
     javaMaxHeapSize = "4g" // this line specifically 
    } 
} 

现在,假设,至于原因,我不能修改的build.gradle,或在任何项目中的所有文件夹中,例如更改或添加会在下次从存储库中取出项目时将被清除。如何通过命令行选项或环境变量或某种可轻松实现自动化的此类方法来设置dex的javaMaxHeapSize

我使用-P标志试过了,是这样的:gradle -Pandroid.dexOptions.javaMaxHeapSize=3g printProps本的build.gradle:

buildscript { 
    repositories { 
     mavenCentral() 
    } 
    dependencies { 
     classpath 'com.android.tools.build:gradle:2.0.+' 
    } 
} 

apply plugin: 'android' 

android { 
    compileSdkVersion 15 
    buildToolsVersion "23.0.2" 
    dexOptions { 
     jumboMode = true 
    } 
} 

task printProps { 
    println "android.dexOptions: " + android.dexOptions.getJavaMaxHeapSize() 
} 

不幸的是,它只是打印出android.dexOptions: null(失败,因为我还没有建立完整的Android之前这个小测试项目)。 printProps任务似乎打印正确的方法,因为当我改变build.gradle设置javaMaxHeapSize时,它打印出正确的值。

+1

克隆现有'build.gradle'到'build-8bittree.gradle'。调整克隆中的'javaMaxHeapSize'。使用'gradle -b build-8bittree.gradle'来建立自定义的'build.gradle'文件。 – CommonsWare

+0

@CommonsWare不错的建议。不幸的是,它让我想起了一些我最初忘记提及的东西,特别是我希望能够轻松自动化它。创建一次并将其存储在项目目录之外会造成“build-8bittree.gradle”过期的风险。每次设置可靠地重新创建它听起来像比这更应该是更多的工作。不过,请做出答案,我会加快行动。 – 8bittree

回答

1

第1步:使用您喜欢的脚本环境,复制build.gradlebuild-8bittree.gradle

第2步:使用您喜欢的脚本环境,添加以下到build-8bittree.gradle

android { 
    dexOptions { 
     javaMaxHeapSize = "4g" // this line specifically 
    } 
} 

(你不限到一个android封闭,所以事实上,可能已经有一个android封闭不是一个限制因素)

步骤#3:使用你最喜欢的脚本环境下,使用-b开关使gradle与您的自定义build-8bittree.gradle文件