Тестирование и устранение неполадок оптимизации

После включения оптимизации приложения проверьте, что ваше приложение работает так, как задумано, и что конфигурация R8 делает то, что вы ожидаете. Общие шаги следующие:

  1. Протестируйте критически важные пользовательские пути вашего приложения (CUJ): например, убедитесь, что пользователи могут входить в систему и выполнять другие важные задачи.
  2. Измерение прироста производительности с помощью тестов производительности: оцените производительность своего приложения до и после включения оптимизации приложения.

Если вы обнаружите проблемы, R8 предоставляет инструменты, которые помогут вам устранить неполадки. Если вы не можете решить проблему с R8, отправьте сообщение об ошибке .

Общие советы

Проблемы с R8 часто уникальны для вашего приложения, но вот несколько общих советов, которые упростят отладку:

  • Временно отключите обфускацию: R8 обфускирует код в рамках процесса оптимизации. Обфускация обычно не является причиной ошибок, но она затрудняет отладку ошибок. Добавьте флаги ‑dontobfuscate и ‑dontoptimize в файл правил сохранения, чтобы помочь вам выявить проблемный код.
  • Проверьте наличие отражения: если вы столкнулись с исключением «нет такого элемента» , например

    Caused by: java.util.NoSuchElementException: Collection contains no element matching the predicate in the stack trace ,

    исключение обычно означает, что рассматриваемое поле используется посредством отражения, и вам необходимо добавить правило сохранения.

  • Проверка байт-кода: большинство проблем R8 требуют проверки байт-кода, которую можно выполнить с помощью таких инструментов, как APK Analyzer .

Проверьте, какие правила применяются

Чтобы вывести полный отчет обо всех правилах, которые R8 применяет при сборке вашего проекта, включите в файл proguard‑rules.pro модуля вашего приложения следующее:

-printconfiguration <output-dir>/<report-name>.txt

Вы можете указать любой путь и имя файла. Если вы не укажете путь или имя файла, R8 выведет отчет о правилах в <module-name>/build/outputs/mapping/<build-type>/configuration.txt .

Понять, почему код был сохранен

Если вы видите сохраненный код, который вы ожидали удалить, используйте параметр конфигурации ‑whyareyoukeeping , чтобы понять, почему код был сохранен. R8 выводит путь от сохраненного кода к одной из точек входа вашего приложения. Для получения дополнительной информации см. документацию ‑whyareyoukeeping в руководстве Proguard.

Восстановить исходную трассировку стека

Код, обрабатываемый R8, изменяется различными способами, так что трассировка стека больше не ссылается на исходный код. Например, могут измениться номера строк и имена классов и методов. Для восстановления исходной трассировки стека R8 предоставляет инструмент командной строки retrace, который входит в пакет инструментов командной строки.

Чтобы использовать retrace, укажите файл сопоставления и файл трассировки стека. Файл сопоставления, называемый mapping.txt , автоматически связывается с вашим Android App Bundle (AAB). Для получения более подробной информации см. документацию retrace и статью Play Console Help Center о том, как деобфусцировать трассировки стека сбоев .