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


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

Answers:


51

在您的Build.gradle中添加

android {
 dexOptions {
    javaMaxHeapSize "4g"
  }
}

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


1
在模块应用程序或项目文件中
Rohith Manchikalapati

1
build.gradle(模块应用程序)
Veeresh Charantimath's

如果您不介意,您可以告诉我为什么会发生这些错误
Rohith Manchikalapati

1
抱歉,这也无法在数字更改中获得相同的错误
Rohith Manchikalapati

3
您还必须添加org.gradle.jvmargs = -Xmx2048m。您可以根据要在堆中分配的RAM更改数字2048。
5511002233'7

50

2017年6月25日更新

在Google IO 2017上,有关于此主题的一些更新。不建议再在dexOptions上设置该标志,因此,如果您有类似下一个的标志,则可以将其删除。

dexOptions {
   javaMaxHeapSize "2g"
}

原始答案:

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

至少需要2 GB的内存,但是如果可以承受的话,您可以尝试3个。

gradle.properties。

org.gradle.jvmargs=-Xmx3072m

默认情况下,Java最大堆大小为一千兆字节,但是如果您在build.gradle文件中对其进行了修改,则...

build.gradle(应用程序)

dexOptions {
   javaMaxHeapSize "2g"
}

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

笔记:

  • 请注意,以上数字因机器而异。

1
对于使用离子建立一个应用程序,你可以将这些org.gradle.jvmargs=-Xmx3072m~/.gradle/gradle.properties
加勒特

这个答案应该被接受为正确的答案。谢谢,顺便说一句
LeonardoSibela

在Android Studio 3.0上,删除javaMaxHeapSize完全可以将我的增量构建时间从90秒减少到7秒。
dell116 '17

多年来,我一直将它放在4g的包中,并且讨厌随着时间的流逝,它总是必须被(提高)。现在,显然我可以摆脱这种混乱。如dell116所说,消除它极大地减少了我的gradle构建时间。
Androidcoder

24

只需将其保留在gradle.properties中:

org.gradle.jvmargs=-Xmx2048m 

您可以参考该文章。


1
太棒了!问题使我发疯,立即解决了这个问题。感谢
Clive Sargeant

在cordova项目中,应该在platform / android / gradle.properties中创建gradle.properties文件
Alex

我找不到该文件。我只有project.properties
Sachin HR

14

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

我已经尝试了很多东西和搜索很多,但对我没有任何帮助,包括跟随和build.gradle(App)在我的情况下也不起作用

android {
  dexOptions {
    javaMaxHeapSize "4g"
  }
}

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

org.gradle.jvmargs=-Xmx2048m 

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


值得称赞的是,谢谢,可能是因为对于默认的Java堆大小来说,整个项目的大小已经很大了,所以还是谢谢。保持摇摆的哥哥!
ralphgabb

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/


1
“以上” ?也许您的意思是“跟随”之类的?
布劳·布劳

该位置没有gradle.properties文件
Sachin HR

谢谢!尝试了一切,这只是对我有用的一个!Java的似乎忽略所有其他设置,如gradle.properties上市的build.gradle等
詹姆斯Trickey

3

您可以build.gradle像这样进行更改(如Veeresh Charantimath建议):

android {
 dexOptions {
    javaMaxHeapSize "2g"
 }
}

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

我从删除了此内容build.gradle

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

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


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):
(...)

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


2

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

在此处输入图片说明

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

完成此操作后,您可以看到构建应用程序的速度在白天和晚上之间的差异。


3
没有与名称的文件:gradle.propertiesC:\Users\USER\.gradle
fWd82 '17

2

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

  • javaMaxHeapSizedex是在过程之外运行的旧方法。这将是dex过程的一个论据。
  • org.gradle.jvmargs是新的方法,在gradle流程中添加了dex。这是整个过程的最大内存(渐变,包括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为您的项目/机器设置一个正确的值。



1
  • 请首先检查您的项目根目录下的gradle.propertises。

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

否则,请增加大小。

我也遇到过同样的问题,我已经用这种方法解决了。


1

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

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


-4

尝试这个

defaultConfig {
    ...

    // Enabling multidex support.
    multiDexEnabled true
}

您好,您的答案不是地址问题,您淹没了自己以及SO用户。请删除此答案以重新获得您的好评。谢谢。
fWd82
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.