Connect with us

Разработка

Повышение производительности приложения за счет лучшего сокращения ресурсов

Начиная с AGP 9.0.0, оптимизированное сокращение ресурсов становится стандартным поведением для любого проекта, в котором включено сокращение ресурсов.

Опубликовано

/

     
     

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

С выпуском версии 8.12.0 Android Gradle Plugin (AGP) в компании представили оптимизированное сокращение ресурсов — ещё более эффективный способ уменьшения размера вашего приложения с помощью R8. Используя его, вы можете уменьшить размер своего приложения, что означает меньший размер приложения, более быструю установку и меньший объём используемой памяти на устройствах ваших пользователей. Результат — более быстрый запуск, улучшенный рендеринг и меньшее количество ANR-ошибок.

Как это работает

Сокращение ресурсов для Android-приложений существует уже давно, и за это время было внесено несколько улучшений — например, сокращение таблицы ресурсов (resources.arsc) теперь является оптимизацией по умолчанию.

Новый подход улучшает сокращение ресурсов за счёт полной интеграции с существующим конвейером оптимизации кода. В новом подходе R8 одновременно оптимизирует как код, так и ссылки на ресурсы, гарантируя, что все ресурсы, на которые ссылается исключительно неиспользуемый код, идентифицируются как неиспользуемые и затем удаляются. Это полностью устраняет необходимость в безусловных правилах сохранения (unconditional keep rules), генерируемых AAPT2 (инструментом упаковки ресурсов для Android), и предоставляет гораздо более детальную и точную информацию для удаления неиспользуемого кода и ресурсов.

Это улучшение по сравнению с существующим процессом, где оптимизация кода и ресурсов разделены. В текущем процессе AAPT2 генерирует правила сохранения (keep rules), чтобы безусловно сохранять классы, на которые есть ссылки из ресурсов. Затем запускается оптимизация R8 с учётом этих правил. После того как R8 завершает оптимизацию и сокращение кода, он сканирует оставшийся код, чтобы построить граф всех ресурсов, на которые есть прямые или косвенные ссылки. Однако безусловные правила AAPT2 часто сохраняют код, который в противном случае не используется, что, в свою очередь, заставляет R8 сохранять как неиспользуемый код, так и неиспользуемые ресурсы, на которые он ссылается.

Как использовать

Для начала включите оптимизацию R8 с сокращением ресурсов, добавив в файл build.gradle.kts следующее:

android {
  buildTypes {
    release {
      isMinifyEnabled = true
      isShrinkResources = true
      …
    }
  }
}

Включите новый оптимизированный конвейер сокращения ресурсов, добавив в файл gradle.properties следующее:

android.r8.optimizedResourceShrinking=true

Преимущества

Оптимизированный конвейер сокращения ресурсов продемонстрировал значительные улучшения по сравнению с существующей реализацией. Для приложений, использующих значительные ресурсы и код в разных форм-факторах, зафиксировали улучшение размера более чем на 50%. Улучшения наблюдаются и в небольших приложениях — например, в Androidify есть следующие улучшения:

Повышение производительности приложения за счет лучшего сокращения ресурсов

В таблице показано постепенное уменьшение размера по мере включения дополнительных оптимизаций, от отсутствия сжатия до оптимизированного сжатия ресурсов. Ячейки, отмеченные звездочкой (*), указывают на улучшенные показатели по сравнению с предыдущей строкой. Включение R8 сокращает размер вашего DEX, в то время как включение сжатия ресурсов удаляет неиспользуемые ресурсы как в папке res, так и в таблице ресурсов, но не приводит к дальнейшему изменению размера DEX. Наконец, оптимизированное сокращение ресурсов ещё больше уменьшает итоговый размер, удаляя и ресурсы, и код из DEX-файла, поскольку оно способно отслеживать ссылки между кодом и ресурсами.

Дальнейшие действия

Начиная с AGP 9.0.0, оптимизированное сокращение ресурсов становится стандартным поведением для любого проекта, в котором включено сокращение ресурсов.

Ознакомьтесь с недавно обновленной документацией, чтобы попробовать оптимизированное сокращение ресурсов, и сообщите Google, если у вас возникнут какие-либо проблемы в системе отслеживания ошибок.

Если вы нашли опечатку - выделите ее и нажмите Ctrl + Enter! Для связи с нами вы можете использовать info@apptractor.ru.
Telegram

Популярное

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: