Die JAR-Datei von Android Studio Google, die zu einem GC-Overhead-Limit führt, hat den Fehler überschritten


210

Ich verwende Android Studio unter OS X. Ich erhalte die folgende Fehlermeldung:

FAILURE: Build mit einer Ausnahme fehlgeschlagen.

  • Was schief gelaufen ist: Ausführung für Aufgabe ': app: preDexDebug' fehlgeschlagen. com.android.ide.common.internal.LoggedErrorException: Fehler beim Ausführen des Befehls: / Applications / Android Studio.app/sdk/build-tools/android-4.4W/dx --dex --output / Users / alex / AndroidStudioProjects / SilentSMS / app / build / intermediates / pre-dexed / debug / android-4.3_r2.1-f22bbff4d1017230e169a4844a9c2195f13060d2.jar /Users/alex/AndroidStudioProjects/SilentSMS/app/libs/android-

    Fehlercode: 3 Ausgabe:

  UNEXPECTED TOP-LEVEL ERROR:
  java.lang.OutOfMemoryError: GC overhead limit exceeded
      at com.android.dx.cf.code.RopperMachine.getSources(RopperMachine.java:665)
      at com.android.dx.cf.code.RopperMachine.run(RopperMachine.java:288)
      at com.android.dx.cf.code.Simulator$SimVisitor.visitLocal(Simulator.java:612)
      at com.android.dx.cf.code.BytecodeArray.parseInstruction(BytecodeArray.java:412)
      at com.android.dx.cf.code.Simulator.simulate(Simulator.java:94)
      at com.android.dx.cf.code.Ropper.processBlock(Ropper.java:782)
      at com.android.dx.cf.code.Ropper.doit(Ropper.java:737)
      at com.android.dx.cf.code.Ropper.convert(Ropper.java:346)
      at com.android.dx.dex.cf.CfTranslator.processMethods(CfTranslator.java:282)
      at com.android.dx.dex.cf.CfTranslator.translate0(CfTranslator.java:139)
      at com.android.dx.dex.cf.CfTranslator.translate(CfTranslator.java:94)
      at com.android.dx.command.dexer.Main.processClass(Main.java:682)
      at com.android.dx.command.dexer.Main.processFileBytes(Main.java:634)
      at com.android.dx.command.dexer.Main.access$600(Main.java:78)
      at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:572)
      at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:284)
      at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:166)
      at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:144)
      at com.android.dx.command.dexer.Main.processOne(Main.java:596)
      at com.android.dx.command.dexer.Main.processAllFiles(Main.java:498)
      at com.android.dx.command.dexer.Main.runMonoDex(Main.java:264)
      at com.android.dx.command.dexer.Main.run(Main.java:230)
      at com.android.dx.command.dexer.Main.main(Main.java:199)
      at com.android.dx.command.Main.main(Main.java:103)

Ich benutze diese Bibliothek:

http://grepcode.com/snapshot/repository.grepcode.com/java/ext/com.google.android/android/4.3_r2.1/

Ich habe die JAR-Datei gezogen und meinem Projekt hinzugefügt - das Projekt, das ich erstellen möchte, ist:

https://github.com/domi007/silentSMS/

Ich verstehe, dass meine xms- und xmx-Werte zu niedrig sind. Ich habe sie erhöht in:

/ Applications / Android Studio.app/bin/idea.vmoptions, sodass jetzt Folgendes angezeigt wird:

-Xms256m
-Xmx1024m

Ich erhalte jedoch immer noch den Fehler. Wodurch könnte dies verursacht werden? Abgesehen davon, dass die SilentSMS-App ein Eclipse-Projekt ist und ich den Code auf Android Studio portiere, habe ich nichts geändert. In Bezug auf Android Studio-Erkennungsfehler ist dies nicht der Fall, und alles andere sieht gut aus.

Antworten:


547

Ich denke, es gibt eine separate Möglichkeit, das Heap-Limit der Dexing-Operation zu erhöhen. Fügen Sie dies zu Ihrem androidAbschluss in Ihrer build.gradleDatei hinzu:

dexOptions {
    javaMaxHeapSize "4g"
}

und sehen, ob das hilft.

(Idee mit freundlicher Genehmigung dieser Antwort von Scott Barta )


45
4gist ein bisschen übertrieben, 2gist in Ordnung
Hugo Gresse

3
Fantastisch! Dies hat auch meinen Fehler behoben. Ich finde, je mehr Speicher ich gebe, desto schneller geht der Build. Ich ging von über 1 Minute auf 19 Sekunden.
Simon

2
Ich erhalte immer noch den Fehler: java.lang.OutOfMemoryError: GC-Overhead-Limit überschritten [org.gradle.api.internal.project.ant.AntLoggingAdapter] bei java.util.BitSet.clone
IgorGanapolsky

7
Ich habe dies hinzugefügt, aber ich sehe immer nochOutOfMemoryError
Chad Bingham

7
hat bei mir nicht funktioniert, musste in gradle.properties aufsteigen:org.gradle.jvmargs=-XX:MaxPermSize=1024m -Xms1024m -Xmx4096m -XX:ReservedCodeCacheSize=1024m
hmac

93

In meinem Fall, um die Heap-Größe zu erhöhen sieht das aus:

Verwenden von Android Studio 1.1.0

android {
    dexOptions {
        incremental true
        javaMaxHeapSize "2048M"
    }
}

Fügen Sie den obigen Code in Ihre Build.gradle- Datei ein.


4
Dies wurde GC overhead limit exceededbehoben , nachdem ich Multidexing aktiviert hatte. Die Ausnahme war inat com.android.dx.command.dexer.Main.runMultiDex(Main.java:334)
Jemand irgendwo

Dies wird als Kommentar nicht besonders hübsch sein, aber der Android Studio-Fehler zeigte "UNERWARTETER FEHLER AUF TOP-LEVEL: java.lang.OutOfMemoryError: GC-Overhead-Limit überschritten". Der Ort der Ausnahme war at com.android.dx.util.FixedSizeList.<init>(FixedSizeList.java:38)oben und der Stapel warcom.android.dx.command.dexer.Main.runMultiDex(Main.java:334) at com.android.dx.command.dexer.Main.run(Main.java:244) at com.android.dx.command.dexer.Main.main(Main.java:215) at com.android.dx.command.Main.main(Main.java:106)
Jemand irgendwo

1
Aber sobald ich hinzugefügt habe, dass Sie javaMaxHeapSize und inkrementelle Parameter vorgeschlagen haben, konnte Android Studio die Multi-Dexed-App erstellen.
Jemand irgendwo

Wenn 2 GB nicht ausreichen, versuche ich 4 GB, die von der Commonware vorgeschlagen wurden.
Jemand irgendwo

1
Vielen Dank. Beachten Sie, worüber die Dokumente sagen incremental: Dies hat viele Einschränkungen und funktioniert möglicherweise nicht. Vorsichtig verwenden.
Ferran Maylinch

41

Dieses neue Problem wird durch die neueste Version von Android verursacht.

Wechseln Sie zu Ihrem Projektstammordner, öffnen Sie ihn gradle.propertiesund fügen Sie die folgenden Optionen hinzu:

org.gradle.daemon=true

org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

org.gradle.parallel=true

org.gradle.configureondemand=true

Fügen Sie dann diese Änderungen in Ihre build.gradleDatei ein:

dexOptions {
        incremental = true
        preDexLibraries = false
        javaMaxHeapSize "4g" // 2g should be also OK
}

1
Warnung: Die android.dexOptions.incrementalEigenschaft ist veraltet und hat keine Auswirkungen auf den Erstellungsprozess.
Tir38

Dies löste mein Problem. Aber ich erstelle eine Datei namens java_pid1512.hprof, die sehr groß ist. Ich vermute, Ihre Dfile-Option erstellt es? ist es notwendig und können Sie zeigen, wie man den Dump in die Datei entfernt
j2emanue

1
@ j2emanue: Diese Datei wurde aufgrund der Option "HeapDumpOnOutOfMemoryError" erstellt: docs.oracle.com/cd/E15289_01/doc.40/e15062/…
Mehlyfication

1
incremental
Möglicherweise

In AS 3.4 hat das Aktivieren von "org.gradle.jvmargs = -Xmx2048m -XX: MaxPermSize = 512m -XX: + HeapDumpOnOutOfMemoryError -Dfile.encoding = UTF-8" in der Datei gradle.properties das Problem für mich gelöst
JimmyFlash

4

Ich deaktiviere meinen Sofortlauf durch:

Menü PreferenceErstellenInstant - Run "Enable Instant - Run zu Hot - Swap - Code"

Ich denke, es ist der Instant Run, der den Build verlangsamt und eine große pidXXX.hprof-Datei erstellt, die dazu führt, dass das Overhead-Limit für AndroidStudio gc überschritten wird.

(Mein Geräte-SDK ist 19.)


Wie haben Sie herausgefunden, dass Instant Run eine so große hprof-Datei erstellt hat? Ich habe festgestellt, dass eine kürzlich auf unserem GitLab-Server erstellt wurde, aber wir haben keine sofortige Ausführung aktiviert.
AdamMc331

4

Android Studio 3.5.3

Suchen Sie die Speichereinstellungen (Cmd + Umschalt + A auf dem Mac oder klicken Sie auf Hilfe und geben Sie "Speichereinstellungen" ein) unter Einstellungen / Einstellungen und erhöhen Sie die IDE-Heap-Größe und / oder die Daemon-Heap-Größe zu Ihrer Zufriedenheit Geben Sie hier die Bildbeschreibung ein


1
Danke, du hast meinen Tag gerettet.
Virendra Pal Singh

1

Fügen Sie dies der Datei build.gradle hinzu

dexOptions {
   javaMaxHeapSize "2g"
}

0

Ich habe alle Java.exe von Taskmanger geschlossen, Android Studio neu gestartet und es hat bei mir funktioniert

Geben Sie hier die Bildbeschreibung ein


0

Für mich hat keine der Antworten funktioniert, die ich hier gesehen habe. Ich vermutete, dass die extrem harte Arbeit der CPU den Computer heiß macht. Nachdem ich Programme geschlossen hatte, die viel CPU (wie Chrome) verbrauchen, und meinen Laptop abgekühlt hatte, verschwand das Problem.

Als Referenz: Ich hatte die CPU auf 96% -97% und die Speichernutzung über 2.000.000K durch einen java.exe-Prozess (der eigentlich gradle-bezogener Prozess war).


In welcher Beziehung steht Ihre Lösung zu dem hier gestellten SPEZIFISCHEN Problem?
Kalabalik

Ich erhalte den gleichen Fehler wie oben angegeben: java.lang.OutOfMemoryError: GC-Overhead-Limit überschritten Die von mir angebotene Lösung hat diesen Fehler für mich
behoben

0

Ich verwende Android Studio 3.4und das einzige, was für mich funktioniert hat, war, die folgenden Zeilen aus meiner build.gradleDatei zu entfernen :

minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

Weil Android Studio 3.4verwendet R8in full modeund nicht direkt kompatibel mitProguard


2
Ich denke, dies ist keine Lösung, wenn Sie einen verschleierten Build veröffentlichen müssen. Ich habe gradle-5.2.1 mit Android Studio 3.4 verwendet und es funktioniert auch mit der minifyEnabled truePro-Guard-Konfiguration, während gradle-5.1.1 ähnliche Probleme hatte.
Vikas Patidar

Dies ist das genaue Gegenteil von dem, was wir wollen. -1
Zun

Wie gesagt, das hat bei mir funktioniert und der Fehler ist weg und endlich konnte ich die apk generieren. Keine der anderen Antworten hat in meinem Projekt funktioniert.
Pableiros

Update Gradle auf 5.2.1 Run Cammand in / Projekt / Android ./gradlew wrapper --gradle-version=5.2.1
Ashok Devatwal

0

In meinem Fall bearbeite ich meine gradle.properties:

Hinweis: Wenn Sie Folgendes aktivieren minifyEnabled true:

entferne diese Zeile:

android.enableR8=true

und füge diese Zeilen in ur build.gradle, androidblock hinzu:

  dexOptions {
        incremental = true
        preDexLibraries = false
        javaMaxHeapSize "4g" // 2g should be also OK
    }

hoffe das hilft jemandem :)


0

4g ist ein bisschen übertrieben. Wenn Sie buildGradle nicht ändern möchten, können Sie FILE -> Invalid caches / restart verwenden.

Das funktioniert gut für mich ...


0

Irgendwann wurde eine Kopie von apply plugin: 'com.android.application'meinem Build-Gradle hinzugefügt. Das Entfernen der doppelten Kopie und das Sicherstellen, dass alle meine Apply-Plugins oben waren, hat das Problem für mich behoben.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.