Я прошел много шагов, чтобы усовершенствовать нашу систему сборки ( те и более).Позже я прочитал этот официальный пост , в котором утверждается, что время сборки улучшено в 5-10 раз при добавочных сборках в Gradle 3.4.Действительно, наши инкрементные сборки не работали, потому что мы использовали annotationProcessors.Начиная с Gradle 4.7, процессоры аннотаций могут opt-in быть совместимыми с инкрементными сборками.Я прошел через множество обновлений зависимостей, чтобы активировать инкрементные сборки с помощью annotationProcessors, которые его поддерживают .
Благодаря различным конфигурациям и улучшениям мне удалось сократить время нашей сборки (prebuilt) с ~ 30 с до ~19s.Основываясь на посте поста инкрементной сборки , я предполагал, что смогу еще больше сократить время сборки до ~ 5 с.
К сожалению, при инкрементных сборках он сократился до ~ 15 с.Используя --profile
и --info
, я попытался дополнительно диагностировать проблему.Только извлечение задачи gradle compileDevDebugJavaWithJavac
показывает, что шаг компиляции прошел от ~ 16 до ~ 12 с.
Инкрементная компиляция 476 классов, завершенных за 12,51 с.
Мне кажется, что это слишком медленно для изменения одной строки и почти не отражаетчто Gradle требует для инкрементных сборок.Я специально пытался изменить файлы с несколькими зависимостями, и я знаю, что публичные константы вызывают полное перестроение.Что еще может вызвать медленную инкрементную сборку только для одного файла?
Я также попытался включить экспериментальную функцию
android.enableSeparateAnnotationProcessing=true
, которая работает и разбивает мою сборку на две части.шаги компиляции
compileDevDebugJavaWithJavac 6,777s
processDevDebugAnnotationsWithJavac 6.104s
Я надеялся, что в сочетании с
org.gradle.parallel=true
обе задачиможет работать параллельно и почти вдвое быстрее.Но, по-видимому, параллельная обработка здесь не работает или не работает?
Что еще можно сделать, чтобы увеличить время сборки очень небольших изменений?
Редактировать: Я обнаружил, что основная проблема заключается в том, чтоу нас слишком много зависимостей классов, и это всегда вызывает компиляцию 476 классов (см. этот вопрос).Поскольку я не ожидаю разрешения достаточных зависимостей классов в нашем устаревшем коде: мой вопрос остается в силе.Может ли проект enableSeparateAnnotationProcessing
быть распараллеленным или есть какая-либо другая конфигурация?