Файл JAR Android Studio Google, що спричинив накладні межі GC, перевищив помилку


210

Я використовую Android Studio на OS X. Отримую це повідомлення про помилку:

Збій: збій не вдався за винятком.

  • Що пішло не так: Не вдалося виконати завдання ': app: preDexDebug'. com.android.ide.common.internal.LoggedErrorException: Не вдалося запустити команду: / 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

    Код помилки: 3 Вихід:

  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)

Я використовую цю бібліотеку:

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

Я витягнув файл JAR і додав його до свого проекту - проект, який я намагаюся створити:

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

Я розумію, це тому, що мої значення xms та xmx занадто низькі. Я збільшив їх у:

/ Програми / Android Studio.app/bin/idea.vmoptions, щоб тепер було сказано:

-Xms256m
-Xmx1024m

Однак я все-таки отримую помилку. Чим це могло бути викликано? Окрім програми silentSMS, що є проектом Eclipse, і я пересилаю код на Android Studio, я нічого не змінив. З точки зору помилок спостереження Android Studio - це не так, а все інше виглядає нормально.

Відповіді:


547

Я думаю, що існує окремий спосіб підняти межу купі операції dexing. Додайте це до androidзакриття у вашому build.gradleфайлі:

dexOptions {
    javaMaxHeapSize "4g"
}

і подивіться, чи це допомагає.

(Ідея люб’язно відповідь від Скотта Барта )


45
4gтрохи зайвий, 2gдобре
Гюго Грессе

3
Фантастичний! Це також виправило мою помилку. Я вважаю, що чим більше пам’яті я їм надаю, тим швидше збирається. Я пройшов більше 1 хв до 19 сек.
Саймон

2
Я все ще отримую помилку: java.lang.OutOfMemoryError: перевищення граничного рівня GC [org.gradle.api.internal.project.ant.AntLoggingAdapter] в java.util.BitSet.clone
IgorGanapolsky

7
Я додав це, але все ще бачуOutOfMemoryError
Чад Бінгем

8
не працювали для мене, потрібні були в gradle.properties:org.gradle.jvmargs=-XX:MaxPermSize=1024m -Xms1024m -Xmx4096m -XX:ReservedCodeCacheSize=1024m
hmac

93

У моєму випадку збільшення розміру купи виглядає приблизно так:

Використання Android Studio 1.1.0

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

Помістіть наведений вище код у файл Build.gradle .


4
це вдалося подолати GC overhead limit exceededпісля того, як я включив Multidexing. Виняток був уat com.android.dx.command.dexer.Main.runMultiDex(Main.java:334)
Хтось десь

це не буде досить як коментар, але помилка Android - студія показала `непередбаченої помилки TOP-LEVEL: java.lang.OutOfMemoryError: GC накладних обмежень exceeded` Розташування виключення було at com.android.dx.util.FixedSizeList.<init>(FixedSizeList.java:38)і верхня частиною стеки булаcom.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)
хто - то де

1
Але як тільки я додав, що ви запропонували параметри javaMaxHeapSize та інкрементні параметри, Android Studio змогла створити багатоскладний додаток.
Хтось десь

якщо 2gb недостатньо певного моменту, я спробую 4gb, що пропонується загальним програмним забезпеченням.
Хтось десь

1
Дякую. Зверніть увагу, про що говорять документи incremental: Це має багато обмежень і може не спрацювати. Використовуйте обережно.
Ферран Мейлінч

41

Ця нова проблема викликана останньою версією Android.

Перейдіть до кореневої папки проекту, відкрийте gradle.propertiesта додайте наступні параметри:

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

Потім додайте ці зміни у свій build.gradleфайл:

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

1
Попередження: android.dexOptions.incrementalвластивість застаріло і це не впливає на процес збирання.
tir38

це вирішило моє питання. але я створюю файл під назвою java_pid1512.hprof, який дуже великий. я здогадуюсь, ваш варіант Dfile створює його? це потрібно і чи можете ви показати, як видалити дамп до файлу
j2emanue

1
@ j2emanue: Цей файл створений через параметр "HeapDumpOnOutOfMemoryError": docs.oracle.com/cd/E15289_01/doc.40/e15062/…
Mehlyfication

1
Можливо, потрібно буде оновити: incrementalвидалено наприкінці 2018 року
cuasodayleo

в AS 3.4, що дозволяє "org.gradle.jvmargs = -Xmx2048m -XX: MaxPermSize = 512m -XX: + HeapDumpOnOutOfMemoryError -Dfile.encoding = UTF-8" у файлі gradle.properties вирішив проблему для мене
JimmyFlash

4

Я відключаю функцію Миттєвого запуску:

Налаштування меню → ЗбіркаМиттєвий запуск "Увімкнути миттєвий запуск до гарячого підкачки"

Я думаю, що миттєвий запуск робить зведення повільним і створює файл pidXXX.hprof великого розміру, який призводить до перевищення накладного ліміту AndroidStudio gc.

(Моєму SDK пристрою 19).


Як ви дізналися, що Instant Run створив такий великий файл hprof? Я помітив одну, створену нещодавно на нашому сервері GitLab, але ми не ввімкнули миттєвий запуск.
AdamMc331

4

Android Studio 3.5.3

Знайдіть Налаштування пам’яті (Cmd + Shift + A на Mac або натисніть Довідка і почніть вводити «Налаштування пам’яті») у розділі Налаштування / Налаштування та збільшити розмір куки IDE та / або Розмір кучки Daemon на власний розсуд введіть тут опис зображення


1
Дякую, що ти врятував мені день.
Вірендра Пал Сінгх


0

Я змусив закрити весь Java.exe з taskmanger, перезапустив Android Studio і це працювало на мене

введіть тут опис зображення


0

Для мене не працювали відповіді, які я бачив, як тут працювали. Я здогадався, що робота над процесором надзвичайно важко робить комп'ютер гарячим. Після того, як я закрив програми, що споживають велику кількість процесора (наприклад, хром) та охолоджуючи ноутбук, проблема зникла.

Для довідки: у мене був процесор на 96% -97% і об'єм пам'яті понад 2 000 000 к.с. під час процесу java.exe (який був фактично процесом, пов'язаним з gradle).


Як ваше рішення стосується конкретної проблеми, поставленої тут?
kalabalik

Я отримую ту саму помилку, яку вказано вище: java.lang.OutOfMemoryError: накладний ліміт GC перевищено. Пропоноване мені рішення вирішило для мене цю помилку
olNoy

0

Я використовую, Android Studio 3.4і єдине, що працювало для мене, - це видалити наступні рядки з мого build.gradleфайлу:

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

Тому що Android Studio 3.4використання R8в full modeі не є безпосередньо сумісним ізProguard


2
Я думаю, що це не рішення, коли вам доведеться випустити затуманену збірку. Я використовував gradle-5.2.1 з Android Studio 3.4, і він працює чудово навіть із налаштуваннями minifyEnabled trueпро-Guard, тоді як у gradle-5.1.1 були подібні проблеми.
Вікас Пацідар

Це прямо протилежне тому, що ми хочемо. -1
Зун

Як я вже говорив, це працювало для мене, і помилка зникла, і нарешті я зміг генерувати apk. Жоден з інших відповідей не працював у моєму проекті.
pableiros

оновити gradle до 5.2.1 запустити cammand в / проект / android ./gradlew wrapper --gradle-version=5.2.1
Ashok Devatwal

0

у моєму випадку я редагую своє gradle.properties:

Примітка: якщо ви включите minifyEnabled true:

видаліть цей рядок:

android.enableR8=true

і додайте ці рядки в ур build.gradle, androidблок:

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

сподіваюся, що це допоможе комусь :)


0

4g - це надмірна кількість, якщо ви не хочете змінювати buildGradle, ви можете використовувати FILE -> Invalid caches / restart.

Це добре для мене ...


0

У якийсь момент apply plugin: 'com.android.application'у мою ступінь збірки додана копія копії. Видалення дублікату копії та переконайтесь, що всі мої плагіни застосовано вгорі вирішили проблему для мене.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.