web-dev-qa-db-ja.com

私のAndroidアプリをgradleでコンパイルするとOutOfMemoryErrorが発生する

Gradleを介してアプリをビルドしようとしていますが、./gradlew buildを実行した後、現在この問題が発生しています:

:myApp:compileDebug


The system is out of resources.
Consult the following stack trace for details.
Java.lang.OutOfMemoryError: Java heap space
    at com.Sun.tools.javac.util.Position$LineMapImpl.build(Position.Java:139)
    at com.Sun.tools.javac.util.Position.makeLineMap(Position.Java:63)
    at com.Sun.tools.javadoc.DocCommentScanner.getLineMap(DocCommentScanner.Java:438)
    at com.Sun.tools.javac.main.JavaCompiler.parse(JavaCompiler.Java:512)
    at com.Sun.tools.javac.main.JavaCompiler.parse(JavaCompiler.Java:550)
    at com.Sun.tools.javac.main.JavaCompiler.parseFiles(JavaCompiler.Java:804)
    at com.Sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.Java:727)
    at com.Sun.tools.javac.main.Main.compile(Main.Java:353)
    at com.Sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.Java:115)
    at org.gradle.api.internal.tasks.compile.jdk6.Jdk6JavaCompiler.execute(Jdk6JavaCompiler.Java:40)
    at org.gradle.api.internal.tasks.compile.jdk6.Jdk6JavaCompiler.execute(Jdk6JavaCompiler.Java:33)
    at org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.delegateAndHandleErrors(NormalizingJavaCompiler.Java:95)
    at org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.execute(NormalizingJavaCompiler.Java:48)
    at org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.execute(NormalizingJavaCompiler.Java:34)
    at org.gradle.api.internal.tasks.compile.DelegatingJavaCompiler.execute(DelegatingJavaCompiler.Java:29)
    at org.gradle.api.internal.tasks.compile.DelegatingJavaCompiler.execute(DelegatingJavaCompiler.Java:20)
    at org.gradle.api.internal.tasks.compile.IncrementalJavaCompilerSupport.execute(IncrementalJavaCompilerSupport.Java:33)
    at org.gradle.api.internal.tasks.compile.IncrementalJavaCompilerSupport.execute(IncrementalJavaCompilerSupport.Java:24)
    at org.gradle.api.tasks.compile.Compile.compile(Compile.Java:68)
    at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:39)
    at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:25)
    at Java.lang.reflect.Method.invoke(Method.Java:597)
    at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.Java:90)
    at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.Java:233)
    at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.Java:1047)
    at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.Java:877)
    at org.gradle.api.internal.BeanDynamicObject$MetaClassAdapter.invokeMethod(BeanDynamicObject.Java:216)
    at org.gradle.api.internal.BeanDynamicObject.invokeMethod(BeanDynamicObject.Java:122)
    at org.gradle.api.internal.CompositeDynamicObject.invokeMethod(CompositeDynamicObject.Java:147)
    at org.gradle.api.tasks.compile.JavaCompile_Decorated.invokeMethod(Unknown Source)
    at groovy.lang.GroovyObject$invokeMethod.call(Unknown Source)
:myApp:compileDebug FAILED

何か案が?

25
Romain Piel

直したと思います。私は この投稿 から解決策を得ました。つまり:

gradlewで置き換える:

GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""

沿って

GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\" \"-Xmx1024m\" \"-Xms256m\" \"-XX:MaxPermSize=1024m\""
30
Romain Piel

私のプロジェクトではgradle.properties次の行を含むファイル:

# 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

私は最後の行のコメントを外しました、そしてそれはうまくいきました。

14
dfrankow

私は通常のJavaプロジェクトでもこの問題に直面しました。テストの実行は広範囲にわたっており、メモリ不足またはpermgenエラーの実行に使用されていました。

したがって、2つのソリューションがあります1.パラメータを設定し、ビルドを実行します

export Java_OPTS="-Xmx1024M -XX:MaxPermSize=512M -XX:ReservedCodeCacheSize=512M" 
export GRADLE_OPTS="-Dorg.gradle.daemon=true"

2番目のオプションは、gradleファイル内のソリューションを簡素化します

test {
    jvmArgs "-XX:MaxPermSize=256m"
}

私は永久的な修正として2番目のオプションをお勧めします。

2
Sanjay Bharwani

Java_HOMEフォルダーを64ビットインストールに変更することも役に立ちました。 IDEAの後に64ビットランナーを使用します。

1
Ilya
dexOptions {

        incremental true

       //javaMaxHeapSize=1024M for 32bit Java,2048M for 64bit Java

       javaMaxHeapSize "1024M"

       //javaMaxHeapSize "2048M"
    }
1
rajkabbur

Java_HOMEフォルダーを64ビットインストールのJava=に変更すると、エラーは発生しなくなりましたが、ビルドサーバーで同じ問題が発生していました。

0
MBulava

FWIW、私は「システムがリソース不足です」というエラー(ただし、別のスタックトレースを使用)を、途方もなく大きい文字列をソースファイルにハードコーディングすることで再現しました。

0
denispyr