🚀
🚀
🚀
🛸
🛰
🪐
🌍
🌑
🚀
🚀
🚀
🛸
🛰
🪐
🌍
🌑

CRASHLYTICS

От ручного анализа до команды субагентов

CRASHLYTICS

От ручного анализа до команды субагентов

Как Иван Луценко ленился всё больше,
но при этом повышал эффективность работы с крашами

Обо мне

  • Роль: Android Tech Lead, Bereke Business
QR

Обо мне

  • Роль: Android Tech Lead, Bereke Business
  • Специализация: платформенная android-разработка
QR

Обо мне

  • Роль: Android Tech Lead, Bereke Business
  • Специализация: платформенная android-разработка
  • Опыт: петы, outsource проекты, банковское приложение
QR

Обо мне

  • Роль: Android Tech Lead, Bereke Business
  • Специализация: платформенная android-разработка
  • Опыт: петы, outsource проекты, банковское приложение
  • Текущий фокус: AI-ассистированная разработка и управление проектами
QR

Наваливаем базы, Crashlytics

  • Мониторинг — crash-free users, trends
Firebase dashboard

Наваливаем базы, Crashlytics

  • Мониторинг — crash-free users, trends
  • Фильтры — по версиям, типам событий
Firebase dashboard

Наваливаем базы, Crashlytics

  • Мониторинг — crash-free users, trends
  • Фильтры — по версиям, типам событий
  • Поддержка Android и iOS
Firebase dashboard

Наваливаем базы, точечно

  • Устройства в деталях
Детали краша

Наваливаем базы, точечно

  • Устройства в деталях
  • Даты — когда появился, тренд
Детали краша

Наваливаем базы, точечно

  • Устройства в деталях
  • Даты — когда появился, тренд
  • Стектрейс — полная цепочка вызовов
Детали краша

1) Анализ руками

  • Долго

1) Анализ руками

  • Долго
  • Не всегда правильно

1) Анализ руками

  • Долго
  • Не всегда правильно
  • False positive в назначении автора

1) Анализ руками

  • Долго
  • Не всегда правильно
  • False positive в назначении автора
  • Не все логи прозрачны

1) Анализ руками

  • Долго
  • Не всегда правильно
  • False positive в назначении автора
  • Не все логи прозрачны
  • Не все разработчики довольны

«Ракету, которая не может взлететь, нет смысла совершенствовать» — нужен другой подход

2) LLM, начало

  • Май 2024, gemini в Crashlytics

2) LLM, начало

  • Май 2024, gemini в Crashlytics
  • Разрыв мозга — «что могло произойти»

2) LLM, начало

  • Май 2024, gemini в Crashlytics
  • Разрыв мозга — «что могло произойти»
  • Анализ неплохой, но поверхностный

2) LLM, начало

Gemini analysis

Наваливаем базы, Claude Desktop

  • Claude

Наваливаем базы, Claude Desktop

  • Claude
  • Desktop

Наваливаем базы, Claude Desktop

  • Claude
  • Desktop
  • Промпт — роль, контекст, правила

Наваливаем базы, Claude Desktop

  • Claude
  • Desktop
  • Промпт — роль, контекст, правила
  • Проекты — project instructions

Наваливаем базы, Claude Desktop

  • Claude
  • Desktop
  • Промпт — роль, контекст, правила
  • Проекты — project instructions
  • Ручная загрузка стектрейса

Наваливаем базы, Claude Desktop

Claude Desktop instructions Claude Desktop анализ

3) Claude Desktop

  • 1. Роль и контекст
  • 2. Входные данные
  • 3. Процесс анализа
  • 4. MCP-стратегия + Fallback

3) Claude Desktop

  • 1. Роль и контекст
  • 2. Входные данные
  • 3. Процесс анализа
  • 4. MCP-стратегия + Fallback
  • 5. Определение assignee
  • 6. Два отчёта на выходе
  • 7. Чеклист и ограничения

3) Claude Desktop

  • 1. Роль и контекст
  • 2. Входные данные
  • 3. Процесс анализа
  • 4. MCP-стратегия + Fallback
  • 5. Определение assignee
  • 6. Два отчёта на выходе
  • 7. Чеклист и ограничения

~249 строк · ~11 500 символов · ~19 800 байт и один форк?

3) Claude Desktop

  • 1. Роль и контекст
  • 2. Входные данные
  • 3. Процесс анализа
  • 4. MCP-стратегия + Fallback
  • 5. Определение assignee
  • 6. Два отчёта на выходе
  • 7. Чеклист и ограничения

~249 строк · ~11 500 символов · ~19 800 байт и один форк?

Наваливаем базы, CC & плагины

  • Claude

Наваливаем базы, CC & плагины

  • Claude
  • CLI

Наваливаем базы, CC & плагины

  • Claude
  • CLI
  • Расширяемая через плагины

Наваливаем базы, CC & плагины

  • Claude
  • CLI
  • Расширяемая через плагины

Плагины

  • Commands
  • Agents
  • Hooks
  • MCP
  • Skills

Наваливаем базы, CC & плагины

  • Claude
  • CLI
  • Расширяемая через плагины

Плагины

  • Commands
  • Agents
  • Hooks
  • MCP
  • Skills
  • Шарится через git
  • Подключается одной строкой

Наваливаем базы, CC & плагины

Plugin marketplaces Plugin installed

4) Claude Code — архитектура

Pipeline

Desktop проект vs CC plugin

Desktop

CC Plugin

  • Ручная загрузка логов
  • Да вообще как хочешь

Desktop проект vs CC plugin

Desktop

CC Plugin

  • Ручная загрузка логов
  • Да вообще как хочешь
  • 1 модель делает всё
  • 4 агента, разные модели

Desktop проект vs CC plugin

Desktop

CC Plugin

  • Ручная загрузка логов
  • Да вообще как хочешь
  • 1 модель делает всё
  • 4 агента, разные модели
  • Сама себя проверяет
  • Отдельный reviewer

Desktop проект vs CC plugin

Desktop

CC Plugin

  • Ручная загрузка логов
  • Да вообще как хочешь
  • 1 модель делает всё
  • 4 агента, разные модели
  • Сама себя проверяет
  • Отдельный reviewer
  • Только Android
  • Android + iOS

Desktop проект vs CC plugin

Desktop

CC Plugin

  • Ручная загрузка логов
  • Да вообще как хочешь
  • 1 модель делает всё
  • 4 агента, разные модели
  • Сама себя проверяет
  • Отдельный reviewer
  • Только Android
  • Android + iOS
  • Хардкод
  • /crash-config + per-project

Два отчёта. Какой сам прочитаешь, какой QA отправишь?

Detailed Analysis

Crash: IllegalStateException — translucent activity + fixed orientation on Android 8.0 Exception: java.lang.IllegalStateException: Only fullscreen opaque activities can request orientation App version: 1.57.0 — 1.58.0 Component: 117 (Activity lifecycle /core/activities/host-activity) Stack trace analysis: 1. android.app.Activity.onCreate(Activity.java:1038) — platform orientation check 2. android.core.app.ComponentActivity.onCreate(ComponentActivity.kt:68) 3. androidx.activity.ComponentActivity.onCreate(ComponentActivity.kt:329) 4. androidx.fragment.app.FragmentActivity.onCreate(FragmentActivity.java:216) 5. HostActivity.kt:145 — super.onCreate() call Checked files: - app/src/main/AndroidManifest.xml:137 — android:screenOrientation="portrait", author: o.krasnozhenko, commit: za123d6c3de (2023-09-20) - app/src/main/AndroidManifest.xml:136 — android:theme="@style/AppTheme", author: default, commit: 3fe6d0f2 (2022-01-01) - core/ui/main/values/styles.xml:18-19 — windowTranslucentStatus=true, windowTranslucentNavigation=true, author: i.vasilenk0, commit: a51dc1a0e1 - core/activities/host-activity/.../HostActivity.kt:145 — super.onCreate(savedInstanceState), author: ivan.lutsenko, commit: d669f51c8e77 (2023-01-17) Executed commands: - git blame -L 136,140 master — app/src/main/AndroidManifest.xml - git blame -L 137,138 master — .../HostActivity.kt Root cause: Known Android 8.0 (API 26) platform bug (Google Issue #68454482, fixed in 8.1). HostActivity has screenOrientation="portrait" in the manifest, but its theme (AppTheme) sets windowTranslucentStatus=true and windowTranslucentNavigation=true, making the window non-opaque. Android 8.0 throws IllegalStateException for this combination at super.onCreate(). Fix before (HostActivity.kt): override fun onCreate(savedInstanceState: Bundle?) { if (screenAccessManager.areScreensDisabled()) { screenAccessManager.disableScreenshot(window) } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { setRecentsScreenHost(isMain) } } Fix after: override fun onCreate(savedInstanceState: Bundle?) { // Workaround: Android 8.0 bug — translucent + fixed orientation = crash // https://issuetracker.google.com/issues/68454482 if (Build.VERSION.SDK_INT == Build.VERSION_CODES.O) { requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED } if (screenAccessManager.areScreensDisabled()) { screenAccessManager.disableScreenshot(window) } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { setRecentsScreenHost(isMain) } } Assignee: o.krasnozhenko (git blame: AndroidManifest.xml:137) Trigger: Launching the app on an Android 8.0 (API 26) device. Verdict: Narrow user slice. Add lint check or CI rule.

JIRA Brief

Crash: IllegalStateException — translucent activity + fixed orientation on Android 8.0 Component: core/activities/host-activity Assignee: o.krasnozhenko (git blame: AndroidManifest.xml:137) Problem: App crashes on launch for Android 8.0 users (9 users, 19 events). Completely blocks app usage. Stack trace: java.lang.IllegalStateException: Only fullscreen opaque activities can request orientation at android.app.Activity.onCreate(Activity.java:1038) at kz.berekebank.business.onCreate(HostActivity.kt:145) Cause: HostActivity has screenOrientation="portrait" + translucent theme. Android 8.0 platform bug throws for this combination. Fix: // Add before super.onCreate() in HostActivity.kt: if (Build.VERSION.SDK_INT == Build.VERSION_CODES.O) { requestedOrientation = SCREEN_ORIENTATION_UNSPECIFIED } Reproduction: 1. Run on device/emulator with Android 8.0 (API 26) 2. App crashes on launch with IllegalStateException Firebase: console.firebase.google.com/.../0b257dc8171bb7ada514

5) Что ещё можно сделать? [но я не буду]

  • Запуск по расписанию
GitHub QR

5) Что ещё можно сделать? [но я не буду]

  • Запуск по расписанию
  • Интеграция с Jira
GitHub QR

5) Что ещё можно сделать? [но я не буду]

  • Запуск по расписанию
  • Интеграция с Jira
  • Авто-PR
GitHub QR

5) Что ещё можно сделать? [но я не буду]

  • Запуск по расписанию
  • Интеграция с Jira
  • Авто-PR
  • Алёрты и отчёты в мессенджеры

«То, что казалось несбыточным на протяжении веков, что вчера было лишь дерзновенной мечтой, сегодня становится реальной задачей, а завтра — свершением» — С.П. Королёв

GitHub QR

LIVE DEMO

от бага до фикса за 5 минут

Q&A

С.П. Королёв
QR
1 / 0