如何从命令行设置dex内存限制?

时间:2016-05-16 17:34:12

标签: android gradle android-gradle

我遇到类似于this的问题,特别是当gradle运行dex时java.lang.OutOfMemoryError: GC overhead limit exceeded。解决方案似乎是将其添加到build.gradle:

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 个答案:

答案 0 :(得分:1)

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

步骤2:使用您喜欢的脚本环境,将以下内容附加到build-8bittree.gradle

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

(您不限于单android个闭包,因此可能已经存在android闭包的事实不是限制因素)

步骤3:使用您喜爱的脚本环境,使用-b开关使用自定义gradle文件构建build-8bittree.gradle