Чрезвычайно долгая сборка с помощью Gradle (Android Studio)
-
20-12-2019 - |
Вопрос
прямо сейчас мы находимся в ситуации, когда время сборки для очень простых изменений составляет 2 минуты 30 секунд.Это (по сравнению с ANT) невероятно медленно и снижает продуктивность всей команды.Я использую Android Studio и использую «Использовать локальное распределение Gradle».Я попытался предоставить gradle больше памяти:
org.gradle.jvmargs=-Xmx6096m -XX:MaxPermSize=2048m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
Намного больше памяти.И ВСЕ ЕЩЕ время от времени ВЫДАЕТ ОШИБКИ ПАМЯТИ.
Исключение в потоке «pool-1-thread-1» java.lang.OutOfMemoryError:Превышен лимит накладных расходов GC
Удивительный.Я использую параллельную опцию и демон:
org.gradle.parallel=истина
org.gradle.daemon=истина
Это не очень помогает.
Я поместил вышеупомянутые параметры в ~/.gradle/gradle.properties (и я даже сомневался, что студия Android это игнорирует, поэтому я проверил - она не игнорирует).
Тем не менее из терминала я получаю время сборки 1:30 против 2:30 в Android Studio, поэтому не уверен, что там не так.1:30 ВСЕ ЕЩЕ БЕЗУМНО по сравнению с Ant.Если вы знаете, что делает Android Studio (или игнорирует, или переписывает конфигурацию Gradle), я был бы благодарен узнать.
Таким образом, просто CMD + B (простая компиляция) после изменений выполняется очень быстро, около 7 секунд.Но когда дело доходит до запуска приложения, оно запускает задачу dexXxxDebug, которая нас просто убивает.Я попробовал поставить
dexOptions { preDexLibraries = false }
Не помогает.
Я понимаю, что gradle, вероятно, еще не готов к использованию в производственных средах, но начинаю сожалеть о нашем решении так рано перейти на него.У нас много модулей, и это, вероятно, является частью проблемы, но с Ant это не было проблемой.
Любая помощь оценена, Дэн
Еще немного информации о времени выполнения:
Описание Продолжительность
Total Build Time 1m36.57s
Startup 0.544s
Settings and BuildSrc 0.026s
Loading Projects 0.027s
Configuring Projects 0.889s
Task Execution 1m36.70s
Пожиратель времени::app:dexDebug 1m16.46s
Решение
Я не совсем понимаю, почему Android Studio работает медленнее, чем командная строка, но вы можете ускорить сборку, включив инкрементное индексирование.В файле сборки вашего модуля добавьте эту опцию в свой android
блокировать:
dexOptions {
incremental true
}
В этом dexOptions
блоке вы также можете указать размер кучи для процесса dex, например:
dexOptions {
incremental true
javaMaxHeapSize "4g"
}
Эти параметры взяты из темы в списке рассылки adt-dev (https://groups.google.com/forum/#!topic/adt-dev/r4p-sBLl7DQ), который имеет немного больше контекста.
Другие советы
Наша команда столкнулась с той же проблемой. Наш проект превышает предел метода для DEX (> 65k). Итак, IN OUT Library Project мы поставили ниже варианты в Build.Gradle:
dexOptions {
jumboMode = true
preDexLibraries = false
}
.
В нашем проекте Build.gradle:
dexOptions {
jumboMode = true
// incremental true
}
.
Ранее мы поинтересовались.После комментарии его принимая около 20 лет, чтобы пройти по сравнению с 2 минутами 30 секунд. Я не знаю, что это может решить вашу проблему.Но это может помочь другим.:)
Поскольку все ответы здесь не решают проблему, которая была задержана с 2014 года, я пойду вперед и опубликую пару ссылок, которые описывают очень симиллерную проблему и настоящие настройки ОС, которые могут не помочь, Поскольку OP, похоже, не указывало его, и решения много варьируются на них.
Этот парень (который заявляет, что он не использует Грейл) на самом деле представляет некоторые очень приятные вещи в Спроси Убунту, что к сожалению Работа в моем случае.
Вот еще одна альтернатива , которая ограничивает резьбы выполнения Грейла, но это на самом деле не улучшилось в моем сценарии К тому, что кто-то говорит по другому ссылке о студии нереста несколько экземпляров Группы (пока параметр влияет только на параллелизм одного экземпляра).
Обратите внимание, что это все возвращается к исходному вопросу «666», высокая приоритетная проблема ...
Лично я не мог проверить многие решения, потому что я работаю над управляемым (без корневых приложений) Ubuntu Machine и не могу открыть - Get / Rebice, но я могу сказать вам, что у меня есть I7-4770, 8 ГБ RAM И гибридный SSD, и у меня есть эта проблема даже после многих памяти и <сильные> подморозки Грейла в течение многих лет . Это тентализующая проблема, и я не могу понять, как Google не совершил необходимых людских ресурсов в проект Группы, чтобы исправить то, что находится в основе разработки для самой важной платформы, которую они строят.
Одно следует отметить на мою среду: я работаю в многоплодной студийной проекте, причем около 10 подпроектов, все они наращивают свои собственные и заполняющие трубопровод Грейла.
При прохождении значения вы можете добавить букву «K», чтобы указать килобайты, «M», чтобы указать мегабайты или «g», чтобы указать гигабайты.
'- автономный "решил мою проблему.