【问题标题】:How to set dex memory limit from command line?如何从命令行设置 dex 内存限制?
【发布时间】:2016-05-16 17:34:11
【问题描述】:

我一直遇到类似于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 时,它打印出正确的值。

【问题讨论】:

  • 将现有的build.gradle 克隆到build-8bittree.gradle。在克隆中调整javaMaxHeapSize。使用 gradle -b build-8bittree.gradle 构建您的自定义 build.gradle 文件。
  • @CommonsWare 不错的建议。不幸的是,它让我想起了我最初忘记提及的事情,特别是我希望能够轻松地自动化它。创建一次并将其存储在项目目录之外会冒build-8bittree.gradle 过时的风险。每次进行设置以可靠地重新创建它听起来比这一切都应该做更多的工作。不过,把它作为一个答案,我会投赞成票。

标签: android gradle android-gradle-plugin


【解决方案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 文件构建

【讨论】:

    猜你喜欢
    • 2014-12-10
    • 2022-01-17
    • 1970-01-01
    • 2010-12-02
    • 2023-03-19
    • 2013-05-15
    • 1970-01-01
    • 2022-06-17
    • 2015-05-25
    相关资源
    最近更新 更多