Подтвердить что ты не робот

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

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

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

./gradlew clean
./gradlew build --parallel

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

Я видел вариант --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 все еще принимает навсегда. Для каждого проекта требуется около минуты. Есть ли способ получить gradle для повторного использования уже декодированных библиотек? Или существует другая причина, почему сборка занимает около часа? Наш процесс ANT занимает менее 15 минут.

4b9b3361

Ответ 1

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

android {
  dexOptions {
    preDexLibraries = false
  }
}

Ответ 2

В соответствии с этим сообщением.

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

Ответ 3

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

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

--offline

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

enter image description here

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

enter image description here

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