当前位置: 首页 > 知识库问答 >
问题:

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

计承德
2023-03-14

每次运行应用程序时,我都会遇到这个Gradle错误。错误是:

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

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

要执行此设置org.gradle.jvmargs=-Xmx2048M项目gradle.properties.有关详细信息,请参阅https://docs.gradle.org/current/userguide/build_environment.html

这是我的身材。gradle(模块:应用程序)文件:

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

共有3个答案

彭洲
2023-03-14

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

org.gradle.jvmargs=-Xmx2048m 

你可以参考那篇文章。

贺浩壤
2023-03-14

添加您的 Build.gradle

android {
 dexOptions {
    javaMaxHeapSize "4g"
  }
}

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

曾嘉荣
2023-03-14

2017年6月25日更新

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

dexOptions {
   javaMaxHeapSize "2g"
}
    < li >来源:加速您的Android Gradle构建

原始答复:

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

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

gradle.properties.

org.gradle.jvmargs=-Xmx3072m

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

build.gradle(App)

dexOptions {
   javaMaxHeapSize "2g"
}

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

>

  • 资源

    1. Reto Meier的官方博客文章
    2. Android开发者的官方视频
    3. DexOptions文档

    笔记

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

  •  类似资料:
    • 维基百科中守护进程的解释 守护进程是一个运行后台进程, 非交互式用户直接控制的在计算机程序 Gradle 守护进程是一个后台进程, 它运行着繁重的构建, 然后在构建等待下一次构建的之间保持自身存在. 这使得数据和代码在下一次构建前已经准备好,并存入内存中. 这显著的提高了后续构建的性能. 启用Gradle守护进程是一种节约构建时间的廉价方式. 强烈建议在所有开发机器上启用Gradle的守护进程.但

    • 建议在开发环境中使用Gradle的守护进程,不建议在持续集成环境和构建服务器环境中使用守护进程. 守护进程可以更快的构建,这对于一个正坐在椅子前构建项目的人来说非常重要.对于CI构建来说,稳定性和可预见性是最重要的.为每个构建运行时用一个新的,完全孤立于以前的版本的程序,更加可靠。

    • Gradle守护进程是一个常驻构建进程.在两个构建之间的空闲期间会等待着下次构建.与每个构建加载Gradle到内存相比,对于多个构建只需要加载一次Gradle到内存具有明显的好处.这本身就是对性能的显著优化,但是不止这些. 现代JVM的显著优化是运行时代码优化.例如,热点(HotSpot)(由Oracle提供并作为OpenJDK的基础的JVM实现)适用于优化运行时代码.优化是渐进的,而不是瞬间的。

    • 守护(Daemon)进程 我们可以认为守护进程就是后台服务进程,因为它会有一个很长的生命周期提供服务,关闭终端不会影响服务,也就是说可以忽略某些信号。 实现守护进程 首先要保证进程在后台运行,可以在启动程序后面加&,当然更原始的方法是进程自己fork然后结束父进程。 if (pid=fork()) { exit(0); // Parent process } 然后是与终端、进程组、会话(Ses

    • Daemonset可以确保全部(或者某些)节点上运行一个Pod的副本。 Daemonset可以确保全部(或者某些)节点上运行一个Pod的副本。当有节点加入集群时,也会为他们新增一个Pod。当有节点从集群移除时,这些Pod也会被回收。删除DaemonSet将会删除它创建的所有Pod。 Daemonset典型用法如下: 在每个节点上运行集群存守护进程 在每个节点上运行日志收集守护进程 在每个节点上运行