Files
mobile-android/CRASH_REPORTS_SYSTEM.md

257 lines
8.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Система 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
В приложении:
1. Откройте **Профиль** (Settings)
2. Нажмите на **Crash Logs**
3. Увидите список всех крашей
4. Нажмите на краш для просмотра деталей
### 2. Программный доступ
```kotlin
// Получить список всех крашей
val crashes = CrashReportManager.getCrashReports(context)
// Удалить конкретный краш
CrashReportManager.deleteCrashReport(context, fileName)
// Удалить все краши
CrashReportManager.deleteAllCrashReports(context)
```
### 3. Тестирование системы
Для проверки работы crash reporter можно добавить тестовый краш:
```kotlin
// В любом месте приложения
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) ===
...
```
## 🔧 Настройки
В [CrashReportManager.kt](rosetta-android/app/src/main/java/com/rosetta/messenger/utils/CrashReportManager.kt):
```kotlin
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()`:
```kotlin
class RosettaApplication : Application() {
override fun onCreate() {
super.onCreate()
CrashReportManager.init(this)
}
}
```
### Обработка крашей
`CrashReportManager` реализует `Thread.UncaughtExceptionHandler`:
- Перехватывает необработанные исключения
- Сохраняет детальную информацию
- Передает управление дефолтному handler (для нормального завершения)
## 📊 Мониторинг
### Что отслеживать:
1. **Частота крашей**: Как часто происходят краши
2. **Тип исключений**: Какие типы ошибок встречаются
3. **Места крашей**: В каких частях кода происходят проблемы
4. **Устройства**: На каких устройствах чаще крашится
### Аналитика
Регулярно проверяйте Crash Logs раздел для:
- Выявления паттернов
- Приоритизации багов
- Улучшения стабильности
## 🚧 Дальнейшие улучшения
Возможные доработки:
1. **Export**: Экспорт крашей в файл для отправки разработчикам
2. **Filtering**: Фильтрация по типу исключения, дате
3. **Statistics**: Статистика по типам крашей
4. **Auto-report**: Опциональная отправка на сервер (с согласия)
5. **Symbols**: Интеграция с символами для более читаемых stack traces
## 🐛 Debug режим
В debug режиме рекомендуется добавить быстрый доступ к Crash Logs:
```kotlin
// В ProfileScreen или DebugMenu
if (BuildConfig.DEBUG) {
Button(onClick = {
throw RuntimeException("Test crash")
}) {
Text("Trigger Test Crash")
}
}
```
## ✅ Чеклист интеграции
- [x] CrashReportManager создан
- [x] RosettaApplication настроен
- [x] AndroidManifest обновлен
- [x] UI для просмотра создан
- [x] Навигация добавлена
- [x] Автоочистка настроена
## 📞 Получение крашей от пользователей
Если пользователь сообщает о краше:
1. Попросите открыть Profile → Crash Logs
2. Найти краш по дате/времени
3. Скопировать текст краша
4. Отправить разработчикам
## 🎯 Best Practices
1. **Регулярная проверка**: Просматривайте краши минимум раз в неделю
2. **Приоритеты**: Сначала исправляйте частые краши
3. **Тестирование**: После исправления проверяйте что краш не воспроизводится
4. **Документация**: Документируйте причины и решения крашей
---
**Статус**: ✅ Готово к использованию
**Версия**: 1.0
**Дата**: 25 января 2026