Gradle строит очень медленно с многопроектной структурой

При построении градиента на многопроектной установке, содержащей примерно 140 проектов / библиотек, время сборки занимало 1 час 22 минуты. И я использовал --parallel . И наша сборка ANT занимает менее 20 минут без параллельного здания.

Вот что я сделал.

 ./gradlew clean ./gradlew build --parallel 

Я сделал небольшое тестирование, похоже, что dexing занимает самое длинное время. Есть ли способ заставить процесс градиента повторно использовать материал, который он уже расшифровал? Если библиотеки уже построены, они должны повторно использовать уже дексированные библиотеки.

Я видел вариант --no-rebuild , но когда я запускаю этот параметр, он говорит следующее

 File '/path/to/project/build/libs/project.aar' specified for property 'bundle' does not exist. 

Я заменил путь к файлу и имя проекта на общий материал.

Использование Gradle 1.9-rc-3


Дополнительная информация (15 января 2014 года):

preDexDebug и preDexRelease принимали ОЧЕНЬ долгое время в каждом проекте. Гораздо больше, чем любая другая задача.


Прогресс (15 января 2014 года):

Хорошо, теперь я помещаю preDexLibraries = false во все файлы build.gradle . Тем не менее, мне все же хотелось бы знать централизованное место, в которое я могу поместить эту запись, и это повлияет на все другие файлы build.gradle .

Однако теперь dexRelease и dexDebug занимают много времени. Есть ли способ, который я могу сказать сборке только для dexDebug или dexRelease и пропустить другую?


Прогресс (15 января 2014 года):

Сработало приложение assembleDebug . Тем не менее, по-прежнему кажется, что он не повторно использует уже декодированные библиотеки. Потому что dexing все еще принимает навсегда. Для каждого проекта требуется около минуты. Есть ли способ получить град для повторного использования уже декодированных библиотек? Или существует другая причина, почему сборка занимает около часа? Наш процесс ANT занимает менее 15 минут.

Solutions Collecting From Web of "Gradle строит очень медленно с многопроектной структурой"

Выполняя clean вы фактически удаляете уже предустановленные библиотеки.
Как было предложено в этом потоке, вы могли бы сэкономить время на clean сборках, отключив предварительное определение (потому что при следующей сборке они будут удалены):

 android { dexOptions { preDexLibraries = false } } 

Согласно этому сообщению .

Прямо сейчас каждый проект будет предварительно определять свои зависимости самостоятельно. Это означает, что 2 компонента в зависимости от одной и той же библиотеки будут запускать pre-dex на class.jar этой библиотеки, что является глупым. Мы смотрим на это.

Вы пытались установить параметры компилятора Gradles?

Если у вас есть удаленные зависимости, каждый раз, когда вы запускаете проект, он будет работать с удаленными ресурсами, используя сеть. Вы должны определить инструкцию для компилятора Gradles, чтобы он работал в автономном режиме, используя:

 --offline 

Здесь я оставляю вам снимок экрана настроек компилятора для лучшей производительности:

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

Или что то же самое …

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

Источник: http://gradle.org/docs/current/userguide/gradle_command_line.html