Android Studio медленная инкрементная сборка - PullRequest
0 голосов
/ 08 февраля 2019

Я прошел много шагов, чтобы усовершенствовать нашу систему сборки ( те и более).Позже я прочитал этот официальный пост , в котором утверждается, что время сборки улучшено в 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 быть распараллеленным или есть какая-либо другая конфигурация?

1 Ответ

0 голосов
/ 08 февраля 2019

Вместо того, чтобы беспокоиться об инкрементном аспекте, возможно, существуют оптимизации, которые вы можете сделать для ускорения разработки.Вы используете Proguard?Если это так, отключите его для своих сборок разработки / постановки и используйте его только для сборок релиза.

Если вы уже делаете это, я не уверен, что предложить, кроме увеличения технических характеристик машины.

...