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


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

Вот оно:

  • Я понимаю, что эта опция в моей сборке.файл грэдла - это то, что я ищу.

    android {
        dexOptions {
            incremental true
        }
    ...
    

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

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

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

3 ответа:

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

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

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

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

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

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

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

Обновить

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

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

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

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