Um Dex in Process auszuführen, benötigt der Gradle-Daemon einen größeren Heap. Es hat derzeit ca. 910 MB

75

Ich erhalte diesen Gradle-Fehler jedes Mal, wenn ich meine App starte. Der Fehler ist:

Um Dex in Process auszuführen, benötigt der Gradle-Daemon einen größeren Heap. Es hat derzeit ca. 910 MB.

Erhöhen Sie für schnellere Builds die maximale Heap-Größe für den Gradle-Daemon auf mehr als 2048 MB.

Setzen Sie dazu org.gradle.jvmargs = -Xmx2048M im Projekt gradle.properties. Weitere Informationen finden Sie unter https://docs.gradle.org/current/userguide/build_environment.html

Hier ist meine build.gradle-Datei (Modul: 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'
    }

Und hier ist meine build.gradle (Projekt) -Datei:

// 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
}

und hier ist meine gradle.properties Datei:

# 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
Rohith Manchikalapati
quelle

Antworten:

51

Fügen Sie in Ihrem Build.gradle hinzu

android {
 dexOptions {
    javaMaxHeapSize "4g"
  }
}

Weitere Informationen - Android Gradle: Was ist javaMaxHeapSize "4g"?

Veeresh Charantimath
quelle
1
in der Modul-App oder in der Projektdatei
Rohith Manchikalapati
1
build.gradle (Modul App)
Veeresh Charantimath
Wenn es Ihnen nichts ausmacht, können Sie mir bitte sagen, warum dieser Fehler auftritt
Rohith Manchikalapati
1
Entschuldigung, das funktioniert auch nicht, wenn der gleiche Fehler mit chnage in Zahlen
auftritt
3
Sie müssen auch org.gradle.jvmargs = -Xmx2048m hinzufügen. Sie können die Nummer 2048 entsprechend dem RAM ändern, den Sie im Heap zuweisen.
5511002233
49

Update vom 25. Juni 2017

Bei Google IO 2017 gab es einige Updates zu diesem Thema. Es wird nicht mehr empfohlen, das Flag für die dexOptions zu setzen. Wenn Sie also etwas wie das nächste haben, können Sie es löschen.

dexOptions {
   javaMaxHeapSize "2g"
}

Ursprüngliche Antwort:

Android Studio 2.1 aktiviert Dex In Process, das die VM mit Gradle teilt, um die Erstellungszeiten zu verbessern. Aus diesem Grund muss der Gradle-Daemon vergrößert werden, um diese Dex-Prozesse zu integrieren.

Zumindest sind 2 GB Speicher erforderlich, aber Sie können es mit drei versuchen, wenn Sie es sich leisten können.

gradle.properties.

org.gradle.jvmargs=-Xmx3072m

Standardmäßig beträgt die maximale Größe des Java-Heapspeichers einen Gig, falls Sie ihn jedoch in der Datei build.gradle geändert haben ...

build.gradle (App)

dexOptions {
   javaMaxHeapSize "2g"
}

... Sie müssen die Größe des Gradle-Daemons entsprechend ändern (muss größer sein, um auf den Heap zu passen).

Anmerkungen:

  • Bitte beachten Sie, dass die obigen Zahlen von Maschine zu Maschine unterschiedlich sind.
Sotti
quelle
1
Für Ionic diejenigen mit einer App zu bauen, können Sie org.gradle.jvmargs=-Xmx3072mzu~/.gradle/gradle.properties
Garrett
Diese Antwort sollte als die richtige akzeptiert werden. Danke übrigens
LeonardoSibela
Unter Android Studio 3.0 hat das Entfernen von javaMaxHeapSize meine inkrementellen Erstellungszeiten vollständig von 90 Sekunden auf 7 Sekunden verringert.
Dell116
Ich hatte dies jahrelang in meinem Gradle, derzeit bei 4 g, und hasste es, dass es im Laufe der Zeit immer gepflegt werden musste. Jetzt kann ich anscheinend diese Unordnung einfach loswerden. Das Eliminieren reduzierte meine Gradle-Build-Zeit immens, wie von dell116 kommentiert.
Androidcoder
24

Lassen Sie das einfach auf Ihren gradle.properties:

org.gradle.jvmargs=-Xmx2048m 

Sie können diesen Artikel als Referenz betrachten.

lujop
quelle
1
Fantastisch! Das Problem machte mich verrückt und das löste es sofort. Vielen Dank
Clive Sargeant
In Cordova-Projekten sollte die Datei gradle.properties in platform / android / gradle.properties erstellt werden
Alex
Ich finde diese Datei nicht. Ich habe nur project.properties
Sachin HR
14

Ich weiß, es ist zu spät für die Antwort, aber ich hoffe, es wird jemandem helfen

Ich habe viel ausprobiert und viel gesucht, aber nichts funktioniert für mich, einschließlich Folgen und build.gradle (App) funktioniert in meinem Fall auch nicht

android {
  dexOptions {
    javaMaxHeapSize "4g"
  }
}

Sie können auch versuchen, Ihre gradle.properties hinzuzufügen :

org.gradle.jvmargs=-Xmx2048m 

In meinem Fall ist das Problem die CPU-Auslastung. Es laufen viele Prozesse, während ich apk erstelle. Ich töte nur einige Prozesse wie Genymotion, Skype, Safari usw. und dann mache ich Caches ungültig / starte es neu.

Ajay Pandya
quelle
empfohlen, wahrscheinlich danke, weil die Gesamtgröße des Projekts für die Standardgröße des Java-Heaps viel zu groß ist, trotzdem danke. Lass es rocken, Bruder!
Ralphgabb
6

Ändern oder erstellen Sie eine Datei mit dem Namen gradle.properties im folgenden Verzeichnis.

Für Mac /Users/USER_NAME/.gradle/gradle.properties

Unter Linux /home/USER_NAME/.gradle/gradle.properties

Unter Windows C: \ Users \ USER_NAME.gradle \ gradle.properties

und wenden Sie die obigen Änderungen an. Schließlich sollte es so aussehen:

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

Bitte beziehen Sie sich auf diesen Link https://tausiq.wordpress.com/2015/02/24/android-speed-up-gradle-build-process-in-android-studio/

ANANDAN SELVAGANESAN
quelle
1
"über" ? Vielleicht meinst du so etwas wie "Folgen"?
Bö macht Blau
Es gibt keine gradle.properties-Datei an diesem Speicherort
Sachin HR
Vielen Dank! Versuchte alles und dies war nur eine, die für mich funktioniert hat! Java schien alle anderen Einstellungen zu ignorieren, wie in gradle.properties und build.gradle usw. aufgeführt.
James Trickey
3

Sie können build.gradlefortfahren und sich so ändern (wie Veeresh Charantimath vorgeschlagen hat):

android {
 dexOptions {
    javaMaxHeapSize "2g"
 }
}

Und dann müssen Sie möglicherweise mit MultiDex-Sachen herumspielen (Sie werden es für große Android-Projekte benötigen). Aber Ihr Problem kann einfacher sein. Es besteht die Möglichkeit, dass Sie einige nicht benötigte Bibliotheken kompilieren und in Ihr Projekt aufnehmen. Ich habe dieses Problem bei meinem kleinen Projekt festgestellt. Folgendes habe ich getan, um das Problem zu beheben:

Ich habe dies entfernt von build.gradle:

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

Und ich habe meinen Build-Ordner manuell aus dem Anwendungsstamm entfernt. Problem gelöst.

Andrei
quelle
2

Ist es ein Fehler oder eine Warnung?

Manchmal ist dies nur eine Warnung und ich kann es schaffen, sie erfolgreich zu erstellen:

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

Das Problem, das einen erfolgreichen Build verhindern kann, kann also ein anderes sein ...

Pedro Reis
quelle
2

Öffnen Sie in WINDOW'S die Datei gradle.properties unter ~ \ Users \ UserName \ .gradle wie unten gezeigt: Für weitere Informationen geben Sie hier die Linkbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

und stellen Sie sicher, dass der Wert für schnellere Builds auf mindestens 4608 MB festgelegt ist (siehe unten). org.gradle.jvmargs = -Xmx4608M

Sobald Sie dies getan haben, können Sie den Unterschied zwischen Tag und Nacht beim Erstellen Ihrer App sehen ...

Vincy
quelle
3
Es gibt keine Datei mit dem Namen: gradle.propertiesin C:\Users\USER\.gradle.
fWd82
2

Ich bin mir ziemlich sicher javaMaxHeapSizeund schließe mich org.gradle.jvmargsgegenseitig aus.

  • javaMaxHeapSizeist die alte Methode, bei der Dex außerhalb des Prozesses ausgeführt wird. Dies wird ein Argument für den Dex-Prozess sein.
  • org.gradle.jvmargsist die neue Art, dies zu tun, mit Dex innerhalb des Gradle-Prozesses. Dies ist der maximale Speicher für den gesamten Prozess (Gradle, einschließlich Dex).

Die Warnung besagt, org.gradle.jvmargsdass> = javaMaxHeapSize (what you used previously for dex)+ sein sollte 512M (an estimation of what's needed for gradle own needs).

Wenn Sie also Dex in Process verwenden möchten (was schneller ist), sollten Sie sich nicht darum kümmern javaMaxHeapSize. Stellen Sie einfach org.gradle.jvmargseinen korrekten Wert für Ihr Projekt / Ihre Maschine ein.

mbonnin
quelle
1
  • Bitte überprüfen Sie zunächst gradle.propertises in Ihrem Projektstammverzeichnis.

Wenn dies nicht der Fall ist, erstellen Sie bitte eine Datei wie diese und fügen Sie dann org.gradle.jvmargs = -Xmx1536m hinzu

Andernfalls, falls bereits vorhanden, erhöhen Sie bitte die Größe.

Ich habe das gleiche Problem, wo ich auf diese Weise gelöst habe.

Hafizur Rahman
quelle
1

Beispiel in gradle.propertiesIhrem Projektstamm.

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

R01010010
quelle
-4

Versuche dies

defaultConfig {
    ...

    // Enabling multidex support.
    multiDexEnabled true
}
Станислав Полозов
quelle
Hallo, Ihre Antwort spricht kein Problem an. Sie ertrinken sowohl sich selbst als auch die Benutzer von SO. Bitte entfernen Sie diese Antwort, um Ihre positive Bewertung zurück zu erhalten. Vielen Dank.
fWd82