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

时间:2016-05-07 15:10:29

标签: android android-studio gradle-daemon

每次运行我的应用时,我都会收到此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(项目)文件:

// 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

13 个答案:

答案 0 :(得分:50)

添加Build.gradle

android {
 dexOptions {
    javaMaxHeapSize "4g"
  }
}

更多信息 - Android Gradle: What is javaMaxHeapSize "4g"?

答案 1 :(得分:43)

2017年6月25日更新

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

names = ['Neeraj Kumar', 'Pankaj Sharma', 'Rahul kapoor']
letters = 'rkp'

# All lower case to be case insensitive
data = [x.lower() for x in names]
chars = list('rkp'.lower())

# Result groups collectors
d1, d2, d3 = [], [], []

for item in data:
    # Find the places for all chars in the name
    indexes = [item.find(c) for c in chars if item.find(c) >= 0]

    if len(indexes) == len(chars):
        # All chars found
        if indexes == sorted(indexes):
            # Same order as chars
            d1.append(names[data.index(item)])
        else:
            # Different order
            d2.append(names[data.index(item)])

    elif len(indexes) > 0:
        # Not all, but some found
        d3.append(names[data.index(item)])

print(d1, d2, d3)

原始回答:

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

至少它需要2演出的内存,但如果你能负担得起,你可以试试三个。

gradle.properties。

dexOptions {
   javaMaxHeapSize "2g"
}

默认情况下,Java max heap size是一个gig,但是如果你在build.gradle文件上修改了它...

build.gradle(App)

org.gradle.jvmargs=-Xmx3072m

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

注意:

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

答案 2 :(得分:21)

只需将其留在gradle.properties上:

org.gradle.jvmargs=-Xmx2048m 

您可以查看that article as reference.

答案 3 :(得分:13)

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

我已经尝试了很多东西和搜索很多但是对我来说没有任何作用包括以下内容和gradle.properties也在我的案例中工作

android {
  dexOptions {
    javaMaxHeapSize "4g"
  }
}

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

org.gradle.jvmargs=-Xmx2048m 

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

答案 4 :(得分:4)

在以下目录中修改或创建名为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/

答案 5 :(得分:2)

你可以继续这样改变build.gradle(就像Veeresh Charantimath建议的那样):

android {
 dexOptions {
    javaMaxHeapSize "2g"
 }
}

然后你可能不得不使用MultiDex stuff(你将需要它用于大型android项目)。 您的问题可能更简单。您有可能在项目中编译并包含一些不需要的库。我在我的小项目中遇到了这个问题。以下是我要解决的问题:

我从build.gradle

中删除了此内容
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
}

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

答案 6 :(得分:1)

是错误还是警告?

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

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

因此可能妨碍成功构建的问题可能是另一个......

答案 7 :(得分:1)

在WINDOW中打开来自〜\ Users \ UserName \。gradle的gradle.properties,如下所示:了解更多信息enter link description here

enter image description here

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

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

答案 8 :(得分:1)

我非常确定org.gradle.jvmargsjavaMaxHeapSize是互斥的。

  • org.gradle.jvmargs是执行此操作的旧方法,dex在此过程之外运行。这将是dex过程的一个参数。
  • org.gradle.jvmargs是一种新的方式,在gradle进程中使用dex。这是整个过程的最大内存(gradle,包括dex)

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

因此,如果您想在进程中使用dex(速度更快),则不应该关心org.gradle.jvmargs。只需将{{1}}设置为项目/计算机的正确值即可。

答案 9 :(得分:0)

似乎有一个错误:

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

使用com.android.tools.build:gradle:2.1.2我将org.gradle.jvmargs=-Xmx3415M设置为dexOptions.javaMaxHeapSize "2g",错误消息消失了。

答案 10 :(得分:0)

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

如果缺席,请创建一个这样的文件,然后添加org.gradle.jvmargs = -Xmx1536m

否则如果已经存在,请增加尺寸。

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

答案 11 :(得分:0)

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

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

答案 12 :(得分:-3)

试试这个

defaultConfig {
    ...

    // Enabling multidex support.
    multiDexEnabled true
}