75

每次运行我的应用程序时,我都会收到此 Gradle 错误。错误是:

要在进程中运行 dex,Gradle 守护进程需要更大的堆。它目前大约有 910 MB。

要加快构建速度,请将 Gradle 守护程序的最大堆大小增加到 2048 MB 以上。

为此,请在项目 gradle.properties 中设置 org.gradle.jvmargs=-Xmx2048M。有关更多信息,请参阅https://docs.gradle.org/current/userguide/build_environment.html

这是我的 build.gradle (Module:app) 文件:

apply plugin: 'com.android.application'

    android {
        compileSdkVersion 23
        buildToolsVersion "23.0.3"

        defaultConfig {
            applicationId "mobileapp.tech2dsk"
            minSdkVersion 15
            targetSdkVersion 23
            versionCode 1
            versionName "1.0"
        }
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
    }

    dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
        testCompile 'junit:junit:4.12'
        compile 'com.android.support:appcompat-v7:23.3.0'
        compile 'com.android.support:design:23.3.0'
    }

这是我的 build.gradle(Project) 文件:

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.1.0'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

这是我的 gradle.properties 文件:

# Project-wide Gradle settings.

# IDE (e.g. Android Studio) users:
# Gradle settings configured through the IDE *will override*
# any settings specified in this file.

# For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html

# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
# Default value: -Xmx10248m -XX:MaxPermSize=256m
# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true
4

13 回答 13

52

2017 年 6 月 25 日更新

在 Google IO 2017 上,有一些关于这个主题的更新。不再建议在 dexOptions 上设置标志,所以如果你有类似下一个的东西,你可以删除它。

dexOptions {
   javaMaxHeapSize "2g"
}

原答案:

Android Studio 2.1 启用了与 Gradle 共享 VM 的 Dex In Process,以缩短构建时间。因此,有必要增加 Gradle 守护程序的大小以合并这些 Dex 进程。

至少需要 2 个内存,但如果你负担得起的话,你可以尝试 3 个。

gradle.properties。

org.gradle.jvmargs=-Xmx3072m

默认情况下,Java 最大堆大小为 1 gig,但如果您在 build.gradle 文件中对其进行了修改...

build.gradle(应用程序)

dexOptions {
   javaMaxHeapSize "2g"
}

...您必须相应地调整 Gradle 守护程序的大小(必须更大以适应堆)。

笔记:

  • 请意识到上述数字因机器而异。
于 2016-05-14T18:48:00.020 回答
51

添加你的 Build.gradle

android {
 dexOptions {
    javaMaxHeapSize "4g"
  }
}

更多信息 - Android Gradle:什么是 javaMaxHeapSize “4g”?

于 2016-05-07T15:18:59.200 回答
24

只需将其留在您的 gradle.properties 上:

org.gradle.jvmargs=-Xmx2048m 

你可以看看那篇文章作为参考。

于 2016-05-13T09:13:34.660 回答
14

我知道答案为时已晚,但希望对某人有所帮助

我已经尝试了很多东西并进行了很多搜索,但对我来说没有任何用处,包括关注和build.gradle (App)在我的情况下也不起作用

android {
  dexOptions {
    javaMaxHeapSize "4g"
  }
}

您也可以尝试在您的gradle.properties上添加:

org.gradle.jvmargs=-Xmx2048m 

在我的情况下,问题是 cpu 利用率有很多进程在运行,而我构建 apk 我只是杀死了一些进程,如 genymotion、skype、safari 等,而不是使缓存/重新启动无效,它对我有用。

于 2016-05-13T12:04:47.690 回答
6

在以下目录中修改或创建一个名为 gradle.properties 的文件。

对于 Mac,/Users/USER_NAME/.gradle/gradle.properties

对于 Linux,/home/USER_NAME/.gradle/gradle.properties

对于 Windows,C:\Users\USER_NAME.gradle\gradle.properties

并应用上述更改。最后它应该看起来像,

org.gradle.daemon=true

# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
org.gradle.parallel=true

org.gradle.configureondemand=true

# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
# Default value: -Xmx10248m -XX:MaxPermSize=256m
org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

请参考此链接 https://tausiq.wordpress.com/2015/02/24/android-speed-up-gradle-build-process-in-android-studio/

于 2016-10-27T14:01:47.763 回答
3

您可以继续进行更改build.gradle(就像 Veeresh Charantimath 建议的那样):

android {
 dexOptions {
    javaMaxHeapSize "2g"
 }
}

然后你可能不得不乱用MultiDex 的东西(你需要它用于大型 android 项目)。你的问题可能更简单。您有一些机会编译并在您的项目中包含一些不需要的库。我在我的小项目中遇到了这个问题。这是我为修复它所做的:

我从以下位置删除了这个build.gradle

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
}

我手动从应用程序根目录中删除了我的构建文件夹。问题解决了。

于 2016-06-13T03:19:17.437 回答
2

我很确定javaMaxHeapSize并且org.gradle.jvmargs是相互排斥的。

  • javaMaxHeapSize是旧的做法,dex 在进程之外运行。这将是 dex 进程的参数。
  • org.gradle.jvmargs是这样做的新方法,在 gradle 进程中使用 dex。这是整个进程的最大内存(gradle,包括dex)

警告说org.gradle.jvmargs应该是 >= javaMaxHeapSize (what you used previously for dex)+ 512M (an estimation of what's needed for gradle own needs)

所以如果你想在进程中使用 dex (更快),你不应该关心javaMaxHeapSize. 只需org.gradle.jvmargs为您的项目/机器设置一个正确的值。

于 2017-05-31T13:02:55.723 回答
2

是错误还是警告?

有时这只是一个警告,我可以成功构建它:

:transformClassesWithDexForDebug
To run dex in process, the Gradle daemon needs a larger heap.
It currently has approximately 910 MB.
For faster builds, increase the maximum heap size for the Gradle daemon to more than 2048 MB.
To do this set org.gradle.jvmargs=-Xmx2048M in the project gradle.properties.
For more information see https://docs.gradle.org/current/userguide/build_environment.html
:mergeDebugJniLibFolders UP-TO-DATE
:transformNative_libsWithMergeJniLibsForDebug
:processDebugJavaRes UP-TO-DATE
:transformResourcesWithMergeJavaResForDebug
:validateDebugSigning
:packageDebug
:zipalignDebug
:assembleDebug
:cdvBuildDebug

BUILD SUCCESSFUL

Total time: 3 mins 44.991 secs
Built the following apk(s):
(...)

因此,可能阻止成功构建的问题可能是另一个问题......

于 2016-09-06T16:17:37.013 回答
2

在窗口中打开 ~\Users\ UserName \.gradle 中的 gradle.properties,如下所示:有关更多信息,请在此处输入链接描述

在此处输入图像描述

并确保将其值设置为最小值为 4608M,如下所示,以便更快地构建 org.gradle.jvmargs =-Xmx4608M

一旦你这样做了,你就可以看到构建应用程序的速度的昼夜差异......

于 2017-04-12T15:42:00.073 回答
1

似乎有一个错误:

https://code.google.com/p/android/issues/detail?id=208214

使用com.android.tools.build:gradle:2.1.2I set org.gradle.jvmargs=-Xmx3415MwithdexOptions.javaMaxHeapSize "2g"并且错误消息消失了。

于 2016-07-03T15:57:57.137 回答
1

例如,在gradle.properties您的项目根目录中。

org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m

于 2018-08-24T00:24:46.380 回答
1
  • 请首先检查项目根目录中的 gradle.propertises。

如果不存在,请像这样创建一个文件,然后添加 org.gradle.jvmargs=-Xmx1536m

否则,如果已经存在,请增加大小。

我遇到了同样的问题,我已经通过这种方式解决了。

于 2017-05-15T16:52:22.847 回答
-4

尝试这个

defaultConfig {
    ...

    // Enabling multidex support.
    multiDexEnabled true
}
于 2016-06-07T06:00:00.517 回答