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 → Crea → Esecuzione 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.