Plik JAR Androida Studio Google powodujący błąd narzutu GC przekroczył błąd

210

Korzystam z systemu Android Studio w systemie OS X. Otrzymuję ten komunikat o błędzie:

BŁĄD: kompilacja nie powiodła się z wyjątkiem.

  • Co poszło źle: wykonanie nie powiodło się dla zadania „: app: preDexDebug”. com.android.ide.common.internal.LoggedErrorException: Nie można uruchomić polecenia: / 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-4.3_r2.1.jar

    Kod błędu: 3 wyjście:

  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)

Korzystam z tej biblioteki:

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

Wyciągnąłem plik JAR i dodałem go do mojego projektu - projekt, który próbuję zbudować, to:

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

Rozumiem, że to dlatego, że moje wartości xms i xmx są zbyt niskie. Zwiększyłem je w:

/ Applications / Android Studio.app/bin/idea.vmoptions, dzięki czemu teraz mówi:

-Xms256m
-Xmx1024m

Jednak nadal pojawia się błąd. Co może to być spowodowane? Poza tym, że aplikacja silentSMS jest projektem Eclipse, a ja przenosiłem kod do Android Studio, nic nie zmieniłem. Jeśli chodzi o błędy wykrywania w Android Studio - nie ma, a wszystko inne wygląda dobrze.

amlwwalker
źródło

Odpowiedzi:

547

Myślę, że istnieje osobny sposób na podniesienie limitu stosu operacji dexing. Dodaj to do swojego androidzamknięcia w swoim build.gradlepliku:

dexOptions {
    javaMaxHeapSize "4g"
}

i zobacz, czy to pomoże.

(pomysł dzięki uprzejmości Scott Barta )

CommonsWare
źródło
45
4gjest trochę przesada, 2gjest ok
Hugo Gresse
3
Fantastyczny! To również naprawiło mój błąd. Uważam, że im więcej pamięci daję, tym szybsza jest kompilacja. Poszedłem z ponad 1 minuty do 19 sekund.
Simon
2
Nadal pojawia
IgorGanapolsky 17.08.16
7
Dodałem to, ale nadal widzęOutOfMemoryError
Chad Bingham,
8
nie działało dla mnie, musiałem przejść do gradle.properties:org.gradle.jvmargs=-XX:MaxPermSize=1024m -Xms1024m -Xmx4096m -XX:ReservedCodeCacheSize=1024m
hmac
93

W moim przypadku zwiększenie wielkości sterty wygląda następująco:

Korzystanie z Androida Studio 1.1.0

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

Umieść powyższy kod w pliku Build.gradle .

Dhruv Raval
źródło
4
działało to do pokonania GC overhead limit exceededpo tym, jak włączyłem Multidexing. Wyjątek byłat com.android.dx.command.dexer.Main.runMultiDex(Main.java:334)
Ktoś gdzieś
to nie będzie ładne jako komentarz, ale błąd Android Studio pokazał „BŁĄD NAJWYŻSZYM POZIOMIE: java.lang.OutOfMemoryError: Przekroczono limit narzutu GC” Lokalizacja wyjątku była na at com.android.dx.util.FixedSizeList.<init>(FixedSizeList.java:38)górze, a na szczycie stosu byłocom.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)
ktoś gdzieś
1
Ale gdy tylko dodałem, zasugerowałem javaMaxHeapSize i parametry przyrostowe, Android Studio było w stanie zbudować aplikację z wieloma wersjami.
Ktoś gdzieś
jeśli 2 GB nie wystarcza w pewnym momencie, spróbuję 4 GB sugerowanego oprogramowania.
Ktoś gdzieś
1
Dzięki. Zwróć uwagę na to, co mówią dokumenty incremental: ma to wiele ograniczeń i może nie działać. Używaj ostrożnie.
Ferran Maylinch,
41

Ten nowy problem jest spowodowany najnowszą wersją Androida.

Przejdź do folderu głównego projektu, otwórz gradle.propertiesi dodaj następujące opcje:

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

Następnie dodaj te zmiany do swojego build.gradlepliku:

dexOptions {
        incremental = true
        preDexLibraries = false
        javaMaxHeapSize "4g" // 2g should be also OK
}
gurusiv
źródło
1
Ostrzeżenie: android.dexOptions.incrementalWłaściwość jest przestarzała i nie ma wpływu na proces kompilacji.
tir38
to rozwiązało mój problem. ale i; ts tworzy plik o nazwie java_pid1512.hprof, który jest bardzo duży. Zgaduję, że twoja opcja Dfile ją tworzy? czy jest to konieczne i czy możesz pokazać, jak usunąć zrzut do pliku
j2emanue
1
@ j2emanue: Ten plik został utworzony z powodu opcji „HeapDumpOnOutOfMemoryError”: docs.oracle.com/cd/E15289_01/doc.40/e15062/…
Mehlyfication
1
Może wymagać aktualizacji: incrementalzostał usunięty pod koniec 2018 r.
cuasodayleo
w AS 3.4 włączenie „org.gradle.jvmargs = -Xmx2048m -XX: MaxPermSize = 512m -XX: + HeapDumpOnOutOfMemoryError -Dfile.encoding = UTF-8” w pliku gradle.properties rozwiązało problem dla mnie
JimmyFlash
4

Wyłączam mój Instant Run przez:

Preferencje menu → KompilacjaNatychmiastowe uruchamianie „Włącz natychmiastowe uruchamianie do kodu wymiany”

Wydaje mi się, że to Instant Run spowalnia kompilację i tworzy plik pidXXX.hprof o dużym rozmiarze, co powoduje przekroczenie limitu narzutu gogle AndroidStudio.

(Mój zestaw SDK urządzenia to 19.)

崔 乐天
źródło
Jak się dowiedziałeś, że to Instant Run stworzył tak duży plik hprof? Zauważyłem jeden utworzony niedawno na naszym serwerze GitLab, ale nie mamy włączonego natychmiastowego uruchamiania.
AdamMc331
4

Android Studio 3.5.3

Znajdź Ustawienia pamięci (Cmd + Shift + A na Macu lub kliknij Pomoc i zacznij pisać „Ustawienia pamięci”) w Preferencjach / Ustawieniach i zwiększ rozmiar stosu IDE i / lub Rozmiar stosu demona według własnego uznania wprowadź opis zdjęcia tutaj

ericn
źródło
1
Dzięki, uratowałeś mi dzień.
Virendra Pal Singh
1

Dodaj to do pliku build.gradle

dexOptions {
   javaMaxHeapSize "2g"
}
Ghulam Rasool
źródło
0

Wymusiłem zamknięcie całego Java.exe z taskmanger, zrestartowałem Android Studio i to zadziałało dla mnie

wprowadź opis zdjęcia tutaj

Hitesh Sahu
źródło
0

Dla mnie żadna z odpowiedzi nie zadziałała. Domyślałem się, że bardzo ciężka praca procesora powoduje, że komputer jest gorący. Po zamknięciu programów zużywających duże ilości procesora (np. Chrome) i ochłodzeniu laptopa problem zniknął.

Dla porównania: miałem procesor na poziomie 96% -97%, a użycie pamięci ponad 2 000 000 KB przez proces java.exe (który w rzeczywistości był procesem związanym z gradem).

olNoy
źródło
Jak twoje rozwiązanie odnosi się do postawionego tutaj SZCZEGÓLNEGO problemu?
kalabalik
Otrzymuję ten sam błąd, co określony powyżej: java.lang.OutOfMemoryError: Przekroczono limit kosztów ogólnych GC Rozwiązanie, które zaoferowałem, rozwiązało dla mnie ten błąd
olNoy
0

Używam Android Studio 3.4i jedyną rzeczą, która działała dla mnie, było usunięcie następujących wierszy z mojego build.gradlepliku:

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

Ponieważ Android Studio 3.4używa R8się full modei nie jest kompatybilny z bezpośrednimProguard

pableiros
źródło
2
Myślę, że to nie jest rozwiązanie, gdy musisz wydać zaciemnioną wersję. Użyłem grad-5.2.1 z Android Studio 3.4 i działa dobrze nawet z minifyEnabled truekonfiguracją pro-guard, podczas gdy grad-5.1.1 miał podobne problemy.
Vikas Patidar
Jest to dokładne przeciwieństwo tego, czego chcemy. -1
Zun
Tak jak powiedziałem, zadziałało to dla mnie, błąd zniknął i wreszcie udało mi się wygenerować apk. Żadna z pozostałych odpowiedzi nie zadziałała w moim projekcie.
pableiros
zaktualizuj gradację do wersji 5.2.1 uruchom cammand w / project / android ./gradlew wrapper --gradle-version=5.2.1
Ashok Devatwal
0

w moim przypadku edytuję swoje gradle.properties:

Uwaga: jeśli włączysz minifyEnabled true:

usuń ten wiersz:

android.enableR8=true

i dodaj te wiersze w ur build.gradle, androidblok:

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

mam nadzieję, że to pomoże komuś :)

sana ebadi
źródło
0

4g to trochę przesada, jeśli nie chcesz zmieniać buildGradle, możesz użyć PLIK -> Nieprawidłowe bufory / restart.

To działa dobrze dla mnie ...

Pabel
źródło
0

W pewnym momencie apply plugin: 'com.android.application'do mojej klasy kompilacji dodano duplikat kopii . Usunięcie duplikatu kopii i upewnienie się, że wszystkie moje wtyczki aplikacyjne były na górze, rozwiązało problem.

mburst
źródło