Google JAR-файл Android Studio, приводящий к превышению предела накладных расходов 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 / Пользователи / alex / AndroidStudioProjects / SilentSMS / app / build / промежуточные / предварительно настроенный / debug / android-4.3_r2.1-f22bbff4d1017230e169a4844a9c2195f13060d2.jar /Users/alex/AndroidStudioProjects/SilentSMS/app/libs/android-4j.r2

    Код ошибки: 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 слишком низкие. Я увеличил их в:

/ Applications / Android Studio.app/bin/idea.vmoptions, так что теперь он говорит:

-Xms256m
-Xmx1024m

Тем не менее, я все еще получаю ошибку. Чем это может быть вызвано? Помимо приложения silentSMS, являющегося проектом Eclipse, и переноса кода в Android Studio, я ничего не изменил. С точки зрения Android Studio обнаружение ошибок - это не так, а все остальное выглядит хорошо.

amlwwalker
источник

Ответы:

547

Я думаю, что есть отдельный способ поднять лимит кучи операции дексинга. Добавьте это к вашему androidзакрытию в вашем build.gradleфайле:

dexOptions {
    javaMaxHeapSize "4g"
}

и посмотрим, поможет ли это.

(идея любезно предоставлена ответом Скотта Барта )

CommonsWare
источник
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после того, как я включил мультидексинг. Исключение было в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 смогла создать мультидексированное приложение.
Кто-то где-то
если 2ГБ не достаточно, то я попробую 4ГБ, что предложила общая программа.
Кто-то где-то
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
Возможно,
в AS 3.4 включение «org.gradle.jvmargs = -Xmx2048m -XX: MaxPermSize = 512m -XX: + HeapDumpOnOutOfMemoryError -Dfile.encoding = UTF-8» в файле gradle.properties решило проблему для меня
JimmyFlash
4

Я отключаю мой Мгновенный запуск:

Настройки меню → СборкаМгновенный запуск «Включить мгновенный запуск для кода горячей замены»

Я полагаю, что это Instant Run, который замедляет сборку и создает файл pidXXX.hprof большого размера, что приводит к превышению предела накладных расходов gc AndroidStudio.

(SDK моего устройства - 19.)

崔 乐天
источник
Как вы узнали, что Instant Run создал такой большой файл hprof? Я заметил один, созданный недавно на нашем сервере GitLab, но у нас не включен мгновенный запуск.
AdamMc331
4

Android Studio 3.5.3

Найдите настройки памяти (Cmd + Shift + A на Mac или нажмите «Справка» и начните вводить «Настройки памяти») в разделе «Предпочтения / Настройки» и увеличьте размер кучи IDE и / или размер кучи демона к своему удовлетворению. введите описание изображения здесь

ericn
источник
1
Спасибо, что спасли мой день.
Вирендра Пал Сингх
1

Добавьте это в файл build.gradle

dexOptions {
   javaMaxHeapSize "2g"
}
Гулам Расул
источник
0

Я принудительно закрыл все Java.exe из TaskManger, перезапустил Android Studio, и у меня это сработало

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

Хите саху
источник
0

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

Для справки: у меня процессор на 96% -97% и использование памяти более 2 000 000 К процессами java.exe (которые на самом деле были связаны с процессом gradle).

olNoy
источник
Как ваше решение связано с конкретной проблемой, поставленной здесь?
Калабалик
Я получаю ту же ошибку, указанную выше: 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

pableiros
источник
2
Я думаю, что это не решение, когда нужно выпустить запутанную сборку. Я использовал gradle-5.2.1 с Android Studio 3.4, и он отлично работает даже с minifyEnabled trueконфигурацией с pro-guard, в то время как у gradle-5.1.1 были подобные проблемы.
Викас Патидар
Это полная противоположность того, что мы хотим. -1
Zun
Как я уже сказал, это сработало для меня, и ошибка исчезла, и, наконец, я смог сгенерировать apk. Ни один из других ответов не работал в моем проекте.
pableiros
обновите gradle до 5.2.1, запустите cammand в / project / android ./gradlew wrapper --gradle-version=5.2.1
Ashok Devatwal
0

в моем случае я редактирую gradle.properties :

примечание: если вы включите minifyEnabled true :

удалить эту строку:

android.enableR8=true

и добавьте эти строки в ur build.gradle, androidblock:

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

надеюсь, это поможет кому-то :)

сана эбади
источник
0

4g немного излишне, если вы не хотите менять buildGradle, вы можете использовать FILE -> Invalid caches / restart.

Это хорошо работает для меня ...

Pabel
источник
0

В какой-то момент дубликат копии apply plugin: 'com.android.application'был добавлен в мою сборку. Удаление дубликата и проверка того, что все мои плагины наверху были наверху, устранили проблему для меня.

mburst
источник