В этом разделе описан стек технологий, использованных в Middara Helper, и обоснование выбора каждой из них.

Обзор стека

Технология Версия Назначение

Kotlin

2.0+

Основной язык разработки

Jetpack Compose

BOM 2025.x

Декларативный UI-фреймворк

Room

2.x

Локальная база данных (SQLite ORM)

Coil

3.x

Загрузка и кэширование изображений

Gson

2.x

Парсинг JSON (база карт)

Kotlin Coroutines

1.x

Асинхронное программирование

Navigation Compose

2.x

Навигация между экранами

Hilt

2.x

Dependency Injection

KSP

Процессор аннотаций (Room, Hilt)

Kotlin

Приложение написано полностью на Kotlin — официальном языке разработки Android-приложений, рекомендованном Google начиная с 2019 года.

Причины выбора:

  • Null Safety — система типов исключает NullPointerException на уровне компилятора

  • Корутины — нативная поддержка асинхронного кода без колбеков и сложных цепочек

  • Расширения и лямбды — лаконичный и читаемый код

  • Полная совместимость с Java — можно использовать любые Java-библиотеки

  • Поддержка Google — Kotlin — первоклассный язык для Android, все новые API разрабатываются с его учетом

Jetpack Compose

UI написан на Jetpack Compose — современном декларативном фреймворке для построения интерфейсов Android.

Причины выбора:

  • Декларативность — UI описывается как функция от состояния (UiState → UI), а не через мутабельные View

  • Меньше кода — нет XML-макетов, нет findViewById, нет ViewHolder

  • Хорошая интеграция с ViewModel и StateFlow — collectAsState() моментально подписывает Composable на поток данных

  • Официальный инструмент Google — активно развивается, имеет большое комьюнити

Room

Для хранения состояния колоды героя используется Room — официальная ORM-библиотека Android поверх SQLite.

Причины выбора:

  • Типобезопасность — SQL-запросы проверяются на этапе компиляции через аннотации

  • Интеграция с Coroutines — DAO-методы могут возвращать Flow<T> из коробки

  • Официальная поддержка — часть Android Jetpack, долгосрочная поддержка гарантирована

  • Минимальный бойлерплейт — достаточно описать @Entity, @Dao и @Database

Карты из cards.json в Room не хранятся — только состояние колоды героя (какие карты выбраны). Это упрощает обновление базы карт без миграций схемы БД.

Coil

Изображения карт отображаются через Coil (Coroutine Image Loader) — современную библиотеку загрузки изображений для Android, написанную на Kotlin.

Причины выбора:

  • Kotlin-first — написана на Kotlin с нативной поддержкой корутин

  • Compose-расширение — AsyncImage из coil-compose идеально вписывается в Compose

  • Кэширование — автоматически кэширует изображения в памяти и на диске

  • Легкость — меньше кода и зависимостей, чем у аналогов (Glide, Picasso)

Gson

Для парсинга cards.json используется Gson — библиотека сериализации/десериализации JSON от Google.

Почему Gson, а не Moshi или kotlinx.serialization:

  • Простота подключения и использования для однократного чтения статичного файла

  • Отсутствие необходимости в аннотациях для простых data class

Минимальные требования к устройству

Параметр Значение

Минимальная версия Android

Android 8.0 (API 26)

Целевая версия Android

Android 15 (API 35)

Архитектура

arm64-v8a, x86_64

Язык интерфейса

Русский

Система сборки

Проект использует Gradle с синтаксисом Kotlin DSL (build.gradle.kts). Для генерации кода Room и Hilt применяется KSP (Kotlin Symbol Processing) — более быстрая альтернатива kapt.