要在进程中运行 dex,Gradle 守护进程需要更大的堆。它目前大约有 910 MB
Posted
技术标签:
【中文标题】要在进程中运行 dex,Gradle 守护进程需要更大的堆。它目前大约有 910 MB【英文标题】:To run dex in process, the Gradle daemon needs a larger heap. It currently has approximately 910 MB 【发布时间】:2016-09-02 13:48:16 【问题描述】:每次我运行我的应用程序时都会收到这个 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
【问题讨论】:
【参考方案1】:2017 年 6 月 25 日更新
在 Google IO 2017 上,有一些关于这个主题的更新。不再推荐在 dexOptions 上设置 flag,所以如果你有类似 next 的东西,你可以删除它。
dexOptions
javaMaxHeapSize "2g"
来源:Speeding Up Your Android Gradle Builds
原答案:
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 守护程序的大小(必须更大以适应堆)。
资源
-
Official blog post by Reto Meier
Official Video in Android
Developers
DexOptions docs.
注意事项:
请注意上述数字因机器而异。【讨论】:
使用 Ionic 构建应用的朋友可以org.gradle.jvmargs=-Xmx3072m
到~/.gradle/gradle.properties
这个答案应该被接受为正确的答案。谢谢,顺便说一句
在 Android Studio 3.0 上删除 javaMaxHeapSize 将我的增量构建时间从 90 秒减少到 7 秒。
多年来,我的 gradle 中有这个,目前为 4g,并且讨厌随着时间的推移它总是必须被倾向于(提升)。现在显然我可以摆脱这种混乱。正如 dell116 所说,消除它极大地减少了我的 gradle 构建时间。【参考方案2】:
添加你的 Build.gradle
android
dexOptions
javaMaxHeapSize "4g"
更多信息 - Android Gradle: What is javaMaxHeapSize "4g"?
【讨论】:
在模块应用程序或项目文件中 build.gradle(模块应用) 如果你不介意能告诉我为什么会出现这些错误 对不起,这也不起作用,在数字中出现同样的错误 您还必须添加 org.gradle.jvmargs=-Xmx2048m 您可以根据您在堆中分配的 ram 更改数字 2048。【参考方案3】:只需将其留在您的 gradle.properties 中:
org.gradle.jvmargs=-Xmx2048m
你可以看that article as reference.
【讨论】:
太棒了!这个问题让我发疯了,这立即解决了。谢谢 在cordova项目中,gradle.properties文件应该在platforms/android/gradle.properties中创建 我没有找到那个文件。我只有 project.properties【参考方案4】:我知道答案为时已晚,但希望对某人有所帮助
我已经尝试了很多东西并进行了很多搜索,但没有什么对我有用,包括关注和 build.gradle (App) 在我的情况下也不起作用
android
dexOptions
javaMaxHeapSize "4g"
您也可以尝试在 gradle.properties 上添加:
org.gradle.jvmargs=-Xmx2048m
在我的情况下,问题是 cpu 利用率有很多进程在运行,而我构建 apk 我只是杀死了一些进程,如 genymotion、skype、safari 等,而不是使缓存无效/重新启动它对我有用。
【讨论】:
推荐,谢谢,可能是因为整个项目的大小对于默认的 Java 堆大小来说太大了,仍然感谢。继续摇摆兄弟!【参考方案5】:在以下目录中修改或创建一个名为 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/
【讨论】:
"以上" ?也许您的意思是“关注”之类的? 该位置没有 gradle.properties 文件 谢谢!尝试了一切,这只是一个对我有用的! Java 似乎忽略了 gradle.properties 和 build.gradle 等中列出的所有其他设置。【参考方案6】:您可以像这样更改build.gradle
(就像 Veeresh Charantimath 建议的那样):
android
dexOptions
javaMaxHeapSize "2g"
然后你可能不得不乱用MultiDex stuff(你将需要它用于大型android项目)。 但是您的问题可能更简单。您可能会编译并在项目中包含一些不需要的库。我在我的小项目中遇到了这个问题。这是我为修复它所做的:
我从build.gradle
删除了这个:
dependencies
compile fileTree(dir: 'libs', include: ['*.jar'])
我手动从应用程序根目录中删除了我的构建文件夹。问题解决了。
【讨论】:
【参考方案7】:是错误还是警告?
有时这只是一个警告,我可以成功构建它:
: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):
(...)
所以可能阻止成功构建的问题可能是另一个问题......
【讨论】:
【参考方案8】:在 WINDOW'S 中打开 ~\Users\UserName\.gradle 中的 gradle.properties,如下所示:了解更多信息 enter link description here
并确保将其值设置为最小值为 4608M,如下所示以加快构建速度 org.gradle.jvmargs=-Xmx4608M
一旦你这样做了,你就可以看到构建应用程序的速度的昼夜差异......
【讨论】:
C:\Users\USER\.gradle
中没有名称为:gradle.properties
的文件。【参考方案9】:
我很确定 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
设置为您的项目/机器的正确值。
【讨论】:
【参考方案10】:似乎有一个错误:
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"
并且错误消息消失了。
【讨论】:
【参考方案11】: 请首先检查项目根目录中的 gradle.propertises。如果不存在,请像这样创建一个文件,然后添加 org.gradle.jvmargs=-Xmx1536m
否则,如果已经存在,请增加大小。
我遇到了同样的问题,我已经通过这种方式解决了。
【讨论】:
【参考方案12】:例如,在项目根目录的 gradle.properties
中。
org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m
【讨论】:
【参考方案13】:试试这个
defaultConfig
...
// Enabling multidex support.
multiDexEnabled true
【讨论】:
您好,您的回答不是解决问题,您正在淹死自己以及 SO 的用户。请删除此答案以恢复您的正面评价。谢谢。以上是关于要在进程中运行 dex,Gradle 守护进程需要更大的堆。它目前大约有 910 MB的主要内容,如果未能解决你的问题,请参考以下文章
jvmargs=-xmx2048m dex 正在处理cordova