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

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

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

对于更快的构建,将 Gradle 守护进程的最大堆大小增加到超过2048MB。

为此,在项目 gradle.properties 中设置 org.gradle.jvmargs =-Xmx2048M。 更多信息请参见 < a href = “ https://docs.gradle.org/current/userguide/build _ Environment.html”> 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
56290 次浏览

加入你的 Build.gradle

android {
dexOptions {
javaMaxHeapSize "4g"
}
}

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

简单地把它留在 gradle.properties 上:

org.gradle.jvmargs=-Xmx2048m

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

我知道现在回答这个问题已经太晚了,但是我希望这个问题能对某些人有所帮助

我已经尝试了很多东西和搜索很多,但没有工作为我包括下列和 Gradle (App)也不工作在我的情况下

android {
dexOptions {
javaMaxHeapSize "4g"
}
}

你也可以尝试在你的 Gradle 房地产公司上添加:

org.gradle.jvmargs=-Xmx2048m

在我的情况下,问题是 CPU 的利用率有很多进程运行,而我构建 apk 我只是杀死一些进程,如 genymotion,skype,safari 等,然后使缓存失效/重新启动它为我工作。

2017年6月25日更新

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

dexOptions {
javaMaxHeapSize "2g"
}

原答案:

Android Studio 2.1启用了与 Gradle 共享虚拟机的 Dex In Process,从而提高了构建时间。因此,有必要增加 Gradle 守护进程的大小以包含那些 Dex 进程。

至少需要2G 的内存,但是如果你买得起的话,可以试试3G。

Gradle 房地产公司。

org.gradle.jvmargs=-Xmx3072m

默认情况下,Java 的 max 堆大小是1G,但是如果您在 build.gradle 文件中修改了它..。

Gradle (App)

dexOptions {
javaMaxHeapSize "2g"
}

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

备注:

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

试试这个

defaultConfig {
...


// Enabling multidex support.
multiDexEnabled true
}

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

android {
dexOptions {
javaMaxHeapSize "2g"
}
}

然后你可能不得不使用 多传感器的东西(你将需要它来完成大型的 android 项目)。你的问题可能更简单。您可能会在项目中编译并包含一些不需要的库。我在我的小项目中遇到了这个问题。以下是我为了解决这个问题所做的努力:

我从 build.gradle中删除了这个:

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

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

似乎有一个窃听器:

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

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

这是一个错误还是一个警告?

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

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

所以阻碍成功构建的问题可能是另一个..。

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

对麦克来说, /Users/USER _ NAME/. gradle/gradle.properties

对于 Linux 来说, /home/USER _ NAME/. gradle/gradle.properties

至于视窗, C: 用户 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/

在窗口中打开 ~ User用户名.gradle 的 gradle.properties,如下所示: 了解更多信息

enter image description here

并确保将其值设置为最小值为4608M,如下所示,以便进行更快的构建 Jvmargs =-Xmx4608M

一旦你这样做,然后你就可以看到白天和晚上的速度差异建设您的应用程序..。

  • 请首先在项目根目录检查 gradle.properties。

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

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

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

我很确定 javaMaxHeapSizeorg.gradle.jvmargs是互斥的。

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

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

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

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

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