Android Studio - Gradle инкрементная сборка

В последние несколько дней я старался улучшить время сборки для нашего проекта без везения. Я не против ждать 1m40s для чистой сборки, но если я вставляю одну строку в один файл java, я получаю то же время сборки, что и в чистой сборке. Я, должно быть, делаю что-то не так, но я просто не могу найти вопрос о переполнении документации или стек, который указывает мне в правильном направлении. Мне удалось собрать кучу информации, которую я буду централизовать здесь, в надежде, что кто-то, кто лучше понимает эту тему, объяснит мне, почему я получаю эти ужасные времена сборки.

Вот он:

  • Я понимаю, что этот параметр в моем файле build.gradle - это то, что я ищу.

    android {
     dexOptions {
     incremental true
     }
    ...

    Славная инкрементная сборка. Однако это не работает для меня, по-видимому, потому, что мой проект использует функцию multidex для ретросопротивления с версиями Android до Lollipop.

  • Пролог на помощь! С Proguard я могу минимизировать свой исполняемый файл и удалить все неиспользуемые методы. У меня есть пара ошибок с proguard minify, но я смог правильно установить его и заставить его работать. Большой! Генерация Dex занимает около 20 секунд для каждой сборки. К сожалению, ничего нет бесплатно, а задача proguard gradle занимает около 2m50s для запуска. Еще хуже, чем мой первоначальный случай.

Есть ли решение этой проблемы?

3 ответа

Наконец нашел решение. Это было в официальных документах все время, мне просто нужно было более глубокое понимание процесса сборки, чтобы понять, что говорится.

Инкрементальные сборки и multidex действительно несовместимые опции. Тем не менее, для версий sdk 21+ инкрементные сборки возможны для multidex apks, перестраивая только затронутые файлы dex. Дополнительную информацию можно найти здесь:

http://developer.android.com/tools/building/multidex.html


У меня нет прямого ответа, как решить проблему с помощью Gradle, но у меня есть предложение, которое может помочь вам увеличить скорость ваших сборников.

Недавно я столкнулся с той же проблемой: наша сборка заняла около 4 минут. Я пробовал разные варианты сборки, но не получал заметной прибыли.

После некоторых исследований я столкнулся с Jrebel для Android. Это что-то вроде "Instant run" на стероидах. Он поддерживает множество типов изменений (пользовательский интерфейс, методы, поля и т.д.) И обновляет приложение в режиме реального времени без повторной активности (следовательно, сохранение состояния). Обычно для применения каких-либо изменений требуется десять тридцать секунд.

Инструмент не является бесплатным, но они предоставляют разные параметры ценообразования и пробную учетную запись, поэтому вы можете попробовать. Он работает как обычный плагин для Android Studio или Eclipse, и установка очень проста.

Обновление

Теперь у них есть даже бесплатная версия: ссылка для публикации


Я пробовал этот вариант сегодня (13 ноября 2017 года) и получил следующее предупреждение о сборке:

Предупреждение. Свойство android.dexOptions.incremental устарело и не влияет на процесс сборки.

Затем я запустил сообщение для предупреждения, и ответ подтвердил, что с новой версии Gradle запись устарела. См. свойство android.dexOptions.incremental устарело

licensed under cc by-sa 3.0 with attribution.