Как справляться с непонятными крашами
Что проверяют
Есть ли у вас система на случай, когда краш виден в отчётах, но не воспроизводится на вашем устройстве. Интервьюеру важно, умеете ли вы собрать улики, сузить круг и не выпускать слепой фикс. Следом обычно спрашивают про ANR или про краш, который случается только у одного производителя.
Как отвечать
Опишите порядок действий, а потом подкрепите его своим случаем:
- сбор данных: стек из Firebase Crashlytics или Android vitals в Play Console. Для релизной сборки с R8 нужен загруженный mapping-файл, иначе стек обфусцирован; вручную его разворачивает утилита
retrace. Для нативных крашей нужны символы NDK; - контекст: в Crashlytics есть кастомные ключи (
setCustomKey) и логи-хлебные крошки (log), туда стоит писать экран, состояние и последние действия. Смотрите на разрез: версия Android, производитель, объём памяти, версия приложения, момент начала роста; - гипотезы по типу:
IllegalStateExceptionпри транзакции фрагмента послеonSaveInstanceState,OutOfMemoryErrorна битмапах, гонка в корутинах,TransactionTooLargeExceptionиз-за крупногоBundle, восстановление после смерти процесса; - воспроизведение: включить «Не сохранять действия» в параметрах разработчика, эмулировать нехватку памяти, прогнать на нужных устройствах в Firebase Test Lab, в отладочной сборке включить
StrictModeи LeakCanary; - выпуск фикса: поэтапная раскатка в Play Console и наблюдение за долей сессий без крашей, при росте раскатку можно остановить.
Дальше ваш пример: какой краш, как нашли причину, сколько времени ушло, как изменилась доля сессий без крашей. Цифры только реальные. Если своего случая нет, разберите типичный, например смерть процесса в фоне, и скажите, что проверяли это на учебном приложении.
Где спотыкаются
Оборачивают подозрительное место в try/catch и считают задачу решённой. Краш пропадает из отчётов, а баг остаётся и проявляется как странное поведение.
Не загружают mapping-файл и полдня гадают по обфусцированному стеку вида a.b.c.
Забывают про смерть процесса: на эмуляторе с большим объёмом памяти всё работает, а у пользователя приложение восстанавливается из фона с пустыми синглтонами и падает.