8.9 KiB
8.9 KiB
Система Crash Reports для Rosetta Android
📋 Обзор
Реализована система автоматического сохранения crash reports в приложении Rosetta Android. Теперь при каждом краше приложения информация о нем будет сохраняться в локальное хранилище для последующего анализа.
🎯 Функциональность
Автоматический сбор
- Отлов крашей: Все необработанные исключения автоматически перехватываются
- Детальная информация: Сохраняется полная информация о краше:
- Timestamp (дата и время)
- Информация о приложении (package, версия)
- Информация об устройстве (модель, Android версия)
- Thread информация
- Exception type и message
- Полный stack trace
- Вложенные causes (до 10 уровней)
Управление логами
- Просмотр: Удобный UI для просмотра всех крашей
- Детали: Подробный просмотр каждого краша с возможностью копирования
- Удаление: Можно удалить отдельный краш или все разом
- Автоочистка: Хранится максимум 50 последних крашей
📁 Файловая структура
rosetta-android/app/src/main/java/com/rosetta/messenger/
├── RosettaApplication.kt # Application класс с инициализацией
├── utils/
│ └── CrashReportManager.kt # Основной класс управления крашами
└── ui/
└── crashlogs/
└── CrashLogsScreen.kt # UI для просмотра логов
🚀 Как использовать
1. Просмотр Crash Logs
В приложении:
- Откройте Профиль (Settings)
- Нажмите на Crash Logs
- Увидите список всех крашей
- Нажмите на краш для просмотра деталей
2. Программный доступ
// Получить список всех крашей
val crashes = CrashReportManager.getCrashReports(context)
// Удалить конкретный краш
CrashReportManager.deleteCrashReport(context, fileName)
// Удалить все краши
CrashReportManager.deleteAllCrashReports(context)
3. Тестирование системы
Для проверки работы crash reporter можно добавить тестовый краш:
// В любом месте приложения
Button(onClick = {
throw RuntimeException("Test crash for debugging")
}) {
Text("Test Crash")
}
📝 Формат Crash Report
Пример сохраненного crash report:
=== CRASH REPORT ===
Timestamp: 2026-01-25 14:30:45
=== App Info ===
Package: com.rosetta.messenger
Version: 1.0.0 (1)
=== Device Info ===
Manufacturer: Samsung
Model: SM-G991B
Android Version: 13 (API 33)
Device: o1s
Board: s5e9925
=== Thread Info ===
Thread: main
Thread ID: 2
=== Exception ===
Exception Type: java.lang.NullPointerException
Message: Attempt to invoke virtual method on null object
=== Stack Trace ===
java.lang.NullPointerException: Attempt to invoke virtual method on null object
at com.rosetta.messenger.ui.MainActivity.onCreate(MainActivity.kt:123)
at android.app.Activity.performCreate(Activity.java:8051)
...
=== Caused by (level 1) ===
...
🔧 Настройки
private const val MAX_CRASH_FILES = 50 // Максимум файлов
private const val CRASH_DIR = "crash_reports" // Директория хранения
💾 Хранение данных
- Расположение:
/data/data/com.rosetta.messenger/files/crash_reports/ - Формат файлов:
crash_YYYY-MM-DD_HH-mm-ss.txt - Автоочистка: Старые файлы удаляются при превышении лимита
🎨 UI Features
Список крашей
- ❌ Красная иконка bug для каждого краша
- 📅 Дата и время краша
- 🔍 Тип исключения
- 🗑️ Кнопка удаления для каждого
Детальный просмотр
- 📄 Полный текст crash report
- ✂️ Возможность выделения и копирования текста
- 🔙 Навигация назад
- 🗑️ Удаление краша
Пустое состояние
Если нет крашей, показывается дружелюбное сообщение:
🐛 No crash reports
Great! Your app is running smoothly
🔒 Безопасность и Privacy
- ✅ Данные хранятся только локально
- ✅ Не отправляются на сторонние серверы
- ✅ Пользователь контролирует удаление
- ✅ Автоматическая ротация старых логов
🛠️ Техническая реализация
Инициализация
Crash reporter автоматически инициализируется в RosettaApplication.onCreate():
class RosettaApplication : Application() {
override fun onCreate() {
super.onCreate()
CrashReportManager.init(this)
}
}
Обработка крашей
CrashReportManager реализует Thread.UncaughtExceptionHandler:
- Перехватывает необработанные исключения
- Сохраняет детальную информацию
- Передает управление дефолтному handler (для нормального завершения)
📊 Мониторинг
Что отслеживать:
- Частота крашей: Как часто происходят краши
- Тип исключений: Какие типы ошибок встречаются
- Места крашей: В каких частях кода происходят проблемы
- Устройства: На каких устройствах чаще крашится
Аналитика
Регулярно проверяйте Crash Logs раздел для:
- Выявления паттернов
- Приоритизации багов
- Улучшения стабильности
🚧 Дальнейшие улучшения
Возможные доработки:
- Export: Экспорт крашей в файл для отправки разработчикам
- Filtering: Фильтрация по типу исключения, дате
- Statistics: Статистика по типам крашей
- Auto-report: Опциональная отправка на сервер (с согласия)
- Symbols: Интеграция с символами для более читаемых stack traces
🐛 Debug режим
В debug режиме рекомендуется добавить быстрый доступ к Crash Logs:
// В ProfileScreen или DebugMenu
if (BuildConfig.DEBUG) {
Button(onClick = {
throw RuntimeException("Test crash")
}) {
Text("Trigger Test Crash")
}
}
✅ Чеклист интеграции
- CrashReportManager создан
- RosettaApplication настроен
- AndroidManifest обновлен
- UI для просмотра создан
- Навигация добавлена
- Автоочистка настроена
📞 Получение крашей от пользователей
Если пользователь сообщает о краше:
- Попросите открыть Profile → Crash Logs
- Найти краш по дате/времени
- Скопировать текст краша
- Отправить разработчикам
🎯 Best Practices
- Регулярная проверка: Просматривайте краши минимум раз в неделю
- Приоритеты: Сначала исправляйте частые краши
- Тестирование: После исправления проверяйте что краш не воспроизводится
- Документация: Документируйте причины и решения крашей
Статус: ✅ Готово к использованию
Версия: 1.0
Дата: 25 января 2026