Падения Android: логи и символы
Сначала разделите Java/Kotlin exception, managed exception C# и нативный crash. Для них нужны разные стеки. Сообщение «приложение закрывается» без лога не позво
Сначала разделите Java/Kotlin exception, managed exception C# и нативный crash. Для них нужны разные стеки. Сообщение «приложение закрывается» без лога не позволяет выбрать причину.
Собрать данные
- Запишите package identifier, version code, ABI, устройство, ОС и точную сборку APK/AAB. Сохраните сам артефакт.
- Подключите устройство и запишите
adb logcatво время одного воспроизведения. Сохраните начало exception и всю цепочкуCaused byлибо блок native crash/tombstone, а не последние несколько строк. - Для Java/Kotlin release с obfuscation нужен mapping-файл именно этого выпуска.
- Для нативного стека нужны символы тех же SO и ABI. В исходной сборке архив native symbols создаётся при совместном
debug_symbolsиseparate_debug_symbols. Наличие такого кода не означает, что подходящий архив уже опубликован или установлен. - Для C# сохраните managed stack и сопоставленные ему артефакты .NET. Нативные символы не восстановят имена managed-методов автоматически.
Что исправлять
ClassNotFoundException — упаковка Java или shrinker; UnsatisfiedLinkError — ABI, отсутствующая SO или её зависимость. Нативный сигнал требует символизации и стека первого сбоя; ANR требует потоковых стеков и времени блокировки, а не только crash-лога.
После исправления повторите тот же сценарий в том же варианте release/debug. Не используйте символы «похожей» сборки: они могут дать правдоподобный неверный стек. Устройство, символизация и падение здесь не выполнялись.