Android studio 2.0 Preview 8带有gradle插件2.0.0-alhpa8,内存警告尽管堆大小达到4Gb

Mar*_*tti 6 android gradle android-studio android-gradle-plugin

我刚刚更新到Android Studio版本2.0预览版8和gradle插件2.0.0-alpha8.我注意到现在有一​​个警告,以防堆空间不足以进行dexing.

正如他们在正确的页面中所说的那样(http://tools.android.com/recent)

在2.0.0-alpha8中,我们为此添加了一些自动诊断:如果构建过程太小,我们会切换回内存不足并发出构建警告,说明如何提高Gradle守护程序的大小.(我们还在为alpha8之后的下一个版本进行一些额外的相关改进.)

当我构建我的项目时,我收到以下错误:

要在进程中运行dex,Gradle守护程序需要更大的堆.它目前有3641 MB.对于更快的构建,请将Gradle守护程序的最大堆大小增加到4x以上,如dexOptions.javaMaxHeapSize中所指定.为此,请在项目gradle.properties中的dexOptions.javaMaxHeapSize中指定org.gradle.jvmargs = -Xmx4g.有关更多信息,请参阅 https://docs.gradle.org/current/userguide/build_environment.html

实际上,我连续得到了很多这些.这让我感到惊讶,因为这是我在gradle.properties文件中看到的(在我的项目主目录中)

ANDROID_BUILD_TARGET_SDK_VERSION=23
ANDROID_BUILD_TOOLS_VERSION=23
ANDROID_BUILD_SDK_VERSION=23
ANDROID_BUILD_MIN_SDK_VERSION=16
org.gradle.jvmargs=-Xmx4g -XX:MaxPermSize=4096m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
Run Code Online (Sandbox Code Playgroud)

另外,在我的主模块的build.gradle中,我放了

android {
    dexOptions {
        incremental true
        javaMaxHeapSize "4g"
    }
}
Run Code Online (Sandbox Code Playgroud)

所以我不明白构建器/ dexer /编译器获得3641MB值的位置.

构建非常缓慢

我禁用了即时运行,现在事情变得更快.构建48-50秒.我仍然得到相同的错误,但只是一次,而不是连续多次.

我在Linux上,我的ulimit -a如下:

core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 31483
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 31483
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
Run Code Online (Sandbox Code Playgroud)

另外,这是我的studio.vmoptions文件:https://gist.github.com/MarKco/1ae7918daf867a378a2f 我想这是未经编辑的.我可以有一个自定义的,但我不知道它可能在哪里.

Mar*_*tti 3

我已经解决了,或者看起来是这样。在发布问题之前我所做的最后一次更改如下:

我有

ANDROID_BUILD_TARGET_SDK_VERSION=22
ANDROID_BUILD_TOOLS_VERSION=22
ANDROID_BUILD_SDK_VERSION=22
ANDROID_BUILD_MIN_SDK_VERSION=16
org.gradle.jvmargs=-Xmx4g -XX:MaxPermSize=4096m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
Run Code Online (Sandbox Code Playgroud)

我把它改为

ANDROID_BUILD_TARGET_SDK_VERSION=23
ANDROID_BUILD_TOOLS_VERSION=23
ANDROID_BUILD_SDK_VERSION=23
ANDROID_BUILD_MIN_SDK_VERSION=16
org.gradle.jvmargs=-Xmx4g -XX:MaxPermSize=4096m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
Run Code Online (Sandbox Code Playgroud)

我不知道为什么它没有自动更改,因为我很长一段时间以来一直使用 23 作为目标版本。无论如何,在我从 22 更改为 23 后,我还没有良好的构建,但这似乎是由于 gradle 同步仍在后台运行。我终止了所有 gradle 项目,保留版本 23 代替 22,禁用即时运行并执行新的同步。起初我一直看到“为了在进程中运行 dex,Gradle 守护进程需要更大的堆”。错误,只是一次,不会像以前那样重复发生。但在一次又一次的构建之后,我发现构建时间越来越短,直到我得到了 10 秒的构建。我想已经解决了 至少我希望如此。

PS最后我根据亨利所说的改变了MaxPermSize,现在我的配置是

ANDROID_BUILD_TARGET_SDK_VERSION=23
ANDROID_BUILD_TOOLS_VERSION=23
ANDROID_BUILD_SDK_VERSION=23
ANDROID_BUILD_MIN_SDK_VERSION=16
org.gradle.jvmargs=-Xmx4g -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
Run Code Online (Sandbox Code Playgroud)