В чем разница между Proguard и R8?

Новая версия Android Studio (3.4) только что вышла и содержит стандартную поддержку R8 вместо Proguard. Может ли кто-нибудь объяснить ключевые различия между ними и какие-либо очевидные преимущества использования R8?

2 ответа

История процесса сборки Android постоянно меняется, и разработчики постоянно пытаются сделать ее более эффективной в отношении времени сборки и размеров генерируемых файлов.dex. Итак, на протяжении всей истории было много вариантов процесса создания файлов.dex из файлов.java.

До выпуска R8 или D8 процесс сборки Android включал эти четыре этапа;

SourceCode (.java) ---javac--->Байт-код Java (.class)---Proguard---> Оптимизированный байт-код Java (.class) --- Dex ---> Оптимизированный байт-код Dalvik (.dex)

Затем разработчики Android решили объединить все шаги между ними в один шаг под названием Jack&Jill для оптимизации. Однако он был введен в 2015 году и от него отказались в 2017 году из-за недостаточной гибкости для работы со всеми растущими инструментами разработки.

Затем был представлен D8, который представляет собой возврат к исходному четырехэтапному процессу сборки с оптимизированным преобразованием Dex. Эта реализация произвела байт-код лучшего качества, чем dx, с меньшим количеством инструкций и лучшим распределением регистров.

Теперь перейдем к R8, у которого аналогичная цель с Jack&Jill в качестве отправной точки, объединение двух из этих шагов сборки в один. Шаг Proguard и Dex. Таким образом, вместо того, чтобы сначала Proguard обрабатывал файл.class, возвращая снова файлы.class и процессор Dex/D8, принимающий.class и возвращающий файлы.dex, R8 объединяет эти два шага и принимает файлы.class, возвращая файлы.dex. Этот инструмент все еще совершенствуется, пытаясь еще больше оптимизировать процесс сборки. Итак, сейчас разумно перенести свой проект на R8, поскольку это все еще развивающийся инструмент, который скоро станет инструментом сборки по умолчанию. (Как видно по включенному по умолчанию при обновлении Android Studio(3.4))

Кроме того, разработчики в системе отслеживания проблем Google очень быстро возвращаются к проблемам, о которых сообщалось в R8, поскольку они жаждут отзывов и хотят усовершенствовать этот инструмент.

Сообщалось, что при использовании R8 создаются файлы.dex меньшего размера, и выполняется более эффективная минификация удаления неиспользуемых классов. Это в некотором роде плюс и минус. Это, очевидно, плюс, потому что меньший размер всегда лучше (в программировании!), Это минус, потому что вам нужно сложным образом пройти свой код, определить свои точки входа и соответственно повторно реализовать правила хранения в вашем файле proguard, поскольку R8 представляет более агрессивная минификация, чем Proguard.

Для получения дополнительной информации вы можете изучить эту статью, которая включает очень подробное объяснение R8 и Proguard: https://www.guardsquare.com/en/blog/proguard-and-r8

Кроме того, это официальная речь от Google I / O 2018: https://www.youtube.com/watch?v=x9T5EYE-QWQ&t=1194s

Надеюсь это поможет,

Поток истории

      ProGuard -> R8
// R8 is default optimizer of .class files from Android Studio v3.4 

ProGuard — продукт с открытым исходным кодом

R8 — это продукт Google .

Цель:

  • уменьшать, уменьшать
  • оптимизировать
  • запутать, переименовать

R8

  • R8 имеет лучшую производительность, потому что преобразуется непосредственно в .dexбез дополнительного шага (оптимизированный .class)
  • R8 лучше совместим с Kotlin
Другие вопросы по тегам