Il file JAR di Google Studio di Android Studio ha causato un errore del limite generale GC


210

Sto usando Android Studio su OS X. Ricevo questo messaggio di errore:

GUASTO: Build fallito con un'eccezione.

  • Cosa è andato storto: esecuzione non riuscita per l'attività ': app: preDexDebug'. com.android.ide.common.internal.LoggedErrorException: Impossibile eseguire il comando: / Applicazioni / Android Studio.app/sdk/build-tools/android-4.4W/dx --dex --output / Users / alex / AndroidStudioProjects / SilentSMS / app / build / intermedi / pre-dexed / debug / android-4.3_r2.1-f22bbff4d1017230e169a4844a9c2195f13060d2.jar /Users/alex/AndroidStudioProjects/SilentSMS/app/libs/android-4.3_2.1.1

    Codice errore: 3 Uscita:

  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)

Sto usando questa libreria:

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

Ho estratto il file JAR e l'ho aggiunto al mio progetto - il progetto che sto cercando di creare è:

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

Capisco perché i miei valori xms e xmx sono troppo bassi. Li ho aumentati in:

/ Applicazioni / Android Studio.app/bin/idea.vmoptions in modo che ora dice:

-Xms256m
-Xmx1024m

Tuttavia, ottengo ancora l'errore. Che cosa potrebbe essere causato da? A parte l'app silentSMS che è un progetto Eclipse e che porto il codice su Android Studio, non ho cambiato nulla. In termini di errori di individuazione di Android Studio, non funziona e tutto il resto sembra a posto.

Risposte:


547

Penso che ci sia un modo separato per aumentare il limite di heap dell'operazione di dex. Aggiungi questo alla tua androidchiusura nel tuo build.gradlefile:

dexOptions {
    javaMaxHeapSize "4g"
}

e vedere se questo aiuta.

(idea per gentile concessione di questa risposta di Scott Barta )


45
4gè un po 'eccessivo, 2gva bene
Hugo Gresse,

3
Fantastico! Anche questo ha corretto il mio errore. Trovo che più memoria gli do, più veloce va la build. Sono passato da oltre 1 minuto a 19 secondi.
Simon,

2
Ottengo ancora l'errore: java.lang.OutOfMemoryError: limite overhead GC superato [org.gradle.api.internal.project.ant.AntLoggingAdapter] su java.util.BitSet.clone
IgorGanapolsky

7
Ho aggiunto questo, ma continuo a vedereOutOfMemoryError
Chad Bingham,

8
non ha funzionato per me, aveva bisogno di aumentare in gradle.properties:org.gradle.jvmargs=-XX:MaxPermSize=1024m -Xms1024m -Xmx4096m -XX:ReservedCodeCacheSize=1024m
hmac,

93

Nel mio caso, aumentare le dimensioni dell'heap è simile al seguente:

Utilizzando Android Studio 1.1.0

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

Inserisci il codice sopra nel tuo file Build.gradle .


4
questo ha funzionato per superare GC overhead limit exceededdopo aver abilitato Multidexing. L'eccezione eraat com.android.dx.command.dexer.Main.runMultiDex(Main.java:334)
Someone Somewhere

questo non sarà bello come un commento, ma l'errore di Android Studio ha mostrato `ERRORE DI LIVELLO SUPERIORE INASPETTATO: java.lang.OutOfMemoryError: limite generale GC superato` La posizione dell'eccezione era in at com.android.dx.util.FixedSizeList.<init>(FixedSizeList.java:38)cima e lo stack eracom.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)
Someone Somewhere

1
Ma non appena ho aggiunto che hai suggerito javaMaxHeapSize e parametri incrementali, Android Studio è stato in grado di creare l'app multi-dex.
Someone Somewhere

se 2 GB non bastano a un certo punto, allora proverò 4 GB suggerito dal commonware.
Someone Somewhere

1
Grazie. Nota cosa dicono i documenti incremental: questo ha molte limitazioni e potrebbe non funzionare. Usare con attenzione.
Ferran Maylinch,

41

Questo nuovo problema è causato dall'ultima versione di Android.

Vai alla cartella principale del progetto, apri gradle.propertiese aggiungi le seguenti opzioni:

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

Quindi aggiungi queste modifiche nel tuo build.gradlefile:

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

1
Avviso: la android.dexOptions.incrementalproprietà è obsoleta e non ha alcun effetto sul processo di generazione.
tir38,

questo ha risolto il mio problema. ma sto creando un file chiamato java_pid1512.hprof che è molto grande. sto indovinando la tua opzione Dfile la sta creando? è necessario e puoi mostrare come rimuovere il dump del file
j2emanue il

1
@ j2emanue: questo file è stato creato a causa dell'opzione "HeapDumpOnOutOfMemoryError": docs.oracle.com/cd/E15289_01/doc.40/e15062/…
Mehlyfication

1
Potrebbe essere necessario aggiornarlo: incrementalviene eliminato alla fine del 2018
cuasodayleo

in AS 3.4 abilitare il file "org.gradle.jvmargs = -Xmx2048m -XX: MaxPermSize = 512m -XX: + HeapDumpOnOutOfMemoryError -Dfile.encoding = UTF-8" nel file gradle.properties risolto il problema per me
JimmyFlash

4

Disattivo il mio Instant Run di:

Preferenze menu → CreaEsecuzione istantanea "Abilita esecuzione istantanea sul codice hot swap"

Immagino sia l'Istant Run che rallenta la compilazione e crea un file pidXXX.hprof di grandi dimensioni che causa il superamento del limite generale di AndroidStudio gc.

(Il mio dispositivo SDK è 19.)


Come hai scoperto che Instant Run ha creato un file hprof così grande? Ne ho notato uno creato di recente sul nostro server GitLab, ma non abbiamo abilitato l'esecuzione istantanea.
AdamMc331,

4

Android Studio 3.5.3

Trova le impostazioni di memoria (Cmd + Maiusc + A su Mac o fai clic su Aiuto e inizia a digitare "Impostazioni memoria") in Preferenze / Impostazioni e aumenta le dimensioni dell'heap IDE e / o le dimensioni dell'heap del demone in modo soddisfacente inserisci qui la descrizione dell'immagine


1
Grazie mi hai salvato la giornata.
Virendra Pal Singh,

1

Aggiungi questo al file build.gradle

dexOptions {
   javaMaxHeapSize "2g"
}

0

Ho costretto a chiudere tutto Java.exe da taskmanger, ho riavviato Android Studio e ha funzionato per me

inserisci qui la descrizione dell'immagine


0

Per me nessuna delle risposte ha funzionato che ho visto qui ha funzionato. Ho indovinato che avere la CPU lavorare molto duramente rende il computer caldo. Dopo aver chiuso i programmi che consumano grandi quantità di CPU (come Chrome) e il raffreddamento del mio laptop, il problema è scomparso.

Per riferimento: ho avuto la CPU con il 96% -97% e l'utilizzo della memoria oltre 2.000.000 K da un processo java.exe (che era in realtà un processo correlato al gradle).


In che modo la tua soluzione si collega al problema SPECIFIC posto qui?
Kalabalik,

Ottengo lo stesso errore sopra specificato: java.lang.OutOfMemoryError: limite overhead GC superato La soluzione che ho offerto ha risolto questo errore per me
olNoy

0

Sto usando Android Studio 3.4e l'unica cosa che ha funzionato per me era rimuovere le seguenti righe dal mio build.gradlefile:

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

Perché Android Studio 3.4sta usando R8in full modee non è direttamente compatibile conProguard


2
Penso che questa non sia una soluzione quando devi rilasciare una build offuscata. Ho usato Gradle-5.2.1 con Android Studio 3.4 e funziona benissimo anche con la minifyEnabled trueconfigurazione pro-guard mentre Gradle-5.1.1 aveva problemi simili.
Vikas Patidar,

Questo è esattamente l'opposto di ciò che vogliamo. -1
Zun

Come ho detto, questo ha funzionato per me e l'errore è sparito e finalmente sono stato in grado di generare l'apk. Nessuna delle altre risposte ha funzionato nel mio progetto.
pableiros,

aggiorna il grado alla 5.2.1 esegui cammand in / project / android ./gradlew wrapper --gradle-version=5.2.1
Ashok Devatwal il

0

nel mio caso, modifico il mio gradle.properties:

nota: se si abilita il minifyEnabled true:

rimuovi questa riga:

android.enableR8=true

e aggiungi queste righe in ur build.gradle, androidblocca:

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

spero che questo aiuti qualcuno :)


0

4g è un po 'eccessivo, se non vuoi cambiare buildGradle puoi usare FILE -> Cache / riavvio non validi.

Questo funziona bene per me ...


0

Ad un certo punto una copia duplicata di è apply plugin: 'com.android.application'stata aggiunta al mio livello di build. Rimuovendo la copia duplicata e assicurandomi che tutti i miei plugin di applicazione nella parte superiore abbiano risolto il problema per me.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.