Android Studio JAR файл, вызывающий превышение лимита GC overhead

Я использую Android Studio на OS X. Я получаю это сообщение об ошибке:

FAILURE: сбой сборки с исключением.

  • Что пошло не так: Выполнение выполнено для задачи ': app: preDexDebug'. com.android.ide.common.internal.LoggedErrorException: Не удалось запустить команду:   /Приложения/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

    Код ошибки: 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 - это не так, и все остальное выглядит нормально.

Ответ 1

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

dexOptions {
    javaMaxHeapSize "4g"
}

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

(идея любезно предоставлена ​​этим ответом от Scott Barta)

Ответ 2

В моем случае увеличение размера кучи выглядит следующим образом:

Использование Android Studio 1.1.0

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

Поместите вышеуказанный код в файл Build.gradle.

Ответ 3

Эта новая проблема вызвана последней версией 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
}

Ответ 4

Я отключу свой Instant Run:

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

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

(Мой SDK устройства - 19.)

Ответ 5

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

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

Ответ 6

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

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

Ответ 7

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

dexOptions {
   javaMaxHeapSize "2g"
}

Ответ 8

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

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

Android Studio 3.4 использует R8 в full mode и не совместима напрямую с Proguard

Ответ 9

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

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

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

android.enableR8=true

и добавьте следующие строки в блок build.gradle, android:

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

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