Приложение поддерживает минимальную версию Android SDK 23 (6.0)
- Kotlin основной язык разработки
- Kotlin Coroutines для фоновых операций и асинхронных задач
- Navigation Component и single activity для навигации
- Retrofit для сетевых запросов
- Dagger2 для dependency injection
- Kotlin Gradle DSL для конфигурации сборки проекта
- Moshi для парсинга json
- ViewBinding для биндинга данных на view
- jUnit 4 для unit тестирования
- Espresso и mockserver для instrumentation testing
- FCM для работы с push уведомлениями
- Yandex AppMetrica для сбора аналитических данных
- Fastlane для сборки проекта на базе GitLab CI/CD
Проект следует принципам Uncle Bob's Clean Architecture и состоит из трех слоёв:
- Presentation
- Domain
- Data
В качестве архитектурного паттерна проектирования используется MVVM (Model-View-ViewModel).
В проекте используется многомодульный подход. Здесь можно выделить основные:
- App-модуль — связывает в себе все модули и имеет зависимости на Feature-модули и Core.
- Core-модуль — содержит вспомогательный код, необходимый для нескольких Feature-модулей. Это могут быть полезные обертки над используемыми библиотеками, общие компоненты presentation слоя, расширения или иные утилиты. Core-модуль ни от кого не зависит.
- Feature-модуль — модуль, содержащий конкретную фичу, изолированную от остальных в соответствии с бизнес-логикой. В общем случае он включает в себя presentation слой, DI и иные специфичные модулю данные. Feature-модуль имеет зависимость на Core-модуль.
При разработке нового функционала приложения используются toggles, управлять которыми можно как локально, так и server side, что дает дополнительную гибкость, стабильность и безопасность интеграции новых фич в проект.
Приложение на текущий момент может поддерживать две локализации - русскую и английскую. Процесс локализации и обновления строк происходит централизованно для всех платформ, через POEditor. Чтоюы запустить синхронизацию и обновление строк в проекте следует выполнить python скрипт и пакета tools проекта.
Для поддержания чистого и легко читаемого кода следует придерживаться следующих принципов и правил:
В дополнение ко всему следует использовать плагин для Android Studio Detekt plugin, настроенный на конфиги линтера проекта.
- На каждую задачу создается feature branch. Обязательные ревью, как минимум 2 approve.
- Для именования коммитов и веток используется подход Semantic Git Commit
- Версионирование релизов происходит по спецификации Semantic Versioning
В проекте не допускается использование экспериментального api различных библиотек, SDK и средств языка, а так же их alpha и beta версий. Для некоторых beta возможны исключения, но только по согласованию со всей командой (с обоснованием такой необходимости), и только из библиотек поставляемых Android SDK и Google. Решения о возможности внесения новых библиотек в проект должны приниматься коллегиально.