Современная разработка Android-приложений все чаще опирается на продвинутые архитектурные подходы и инструменты, позволяющие создавать масштабируемые, тестируемые и легко поддерживаемые продукты. В этом обзоре мы рассмотрим 10 тщательно отобранных репозиториев на GitHub, которые демонстрируют лучшие практики использования многомодульной архитектуры (с разделением на модули app
, feature
и core
), паттерна MVI (Model-View-Intent) в feature-модулях, декларативного UI с помощью Jetpack Compose, эффективной навигации и внедрения зависимостей через Hilt. Все проекты ориентированы исключительно на Kotlin для Android, без использования Kotlin Multiplatform (KMP).
app
, feature
и core
модули повышает управляемость проекта и скорость сборки.Прежде чем мы перейдем к списку репозиториев, давайте кратко рассмотрим ключевые компоненты, которые делают эти проекты примерами для подражания.
Многомодульная архитектура предполагает разделение приложения на несколько независимых или слабосвязанных модулей. Обычно выделяют следующие типы:
app
модуль: Основной модуль приложения, точка входа. Он зависит от feature
и core
модулей и объединяет их.feature
модули: Инкапсулируют определенную функциональность приложения (например, профиль пользователя, каталог товаров, настройки). Они должны быть максимально независимыми друг от друга. Именно здесь часто реализуется UI и бизнес-логика конкретной фичи.core
(или common
, shared
) модуль: Содержит общий код, используемый несколькими другими модулями. Это могут быть утилиты, базовые классы, модели данных, компоненты DI, ресурсы и т.д.Такой подход улучшает время сборки, упрощает тестирование, способствует повторному использованию кода и позволяет командам работать над разными частями приложения параллельно.
Пример графа зависимостей в многомодульном приложении.
MVI — это архитектурный паттерн, который делает поток данных в приложении однонаправленным и циклическим. Основные компоненты:
MVI помогает создавать более предсказуемые и легко отлаживаемые приложения, так как изменения состояния происходят последовательно и явно.
Jetpack Compose — это современный инструментарий Android для создания нативного пользовательского интерфейса. Вместо императивного подхода (изменение UI через XML и поиск View) Compose использует декларативный стиль: вы описываете, как должен выглядеть UI для определенного состояния, а Compose автоматически обновляет его при изменении этого состояния. Это упрощает и ускоряет разработку UI.
Hilt — это библиотека для внедрения зависимостей (DI) для Android, построенная поверх Dagger. Hilt упрощает использование Dagger в Android-приложениях, предоставляя стандартный способ интеграции DI в компоненты Android (такие как Activity, Fragment, ViewModel) и уменьшая количество шаблонного кода.
Организация навигации между экранами, особенно когда они находятся в разных feature
модулях, требует особого внимания. Цель — сохранить слабую связанность между модулями. Для этого часто используют Jetpack Navigation Component, кастомные координаторы навигации или другие подходы, позволяющие feature
модулям не знать друг о друге напрямую.
Ниже представлен список из 10 репозиториев, которые демонстрируют применение указанных технологий и подходов. Эти проекты послужат отличными примерами для изучения и внедрения лучших практик в ваши собственные Android-приложения на Kotlin.
Этот проект представляет собой шаблон Android-приложения, реализующий MVI архитектуру с Kotlin Coroutines Flow, Hilt для внедрения зависимостей, многомодульную структуру (app
, feature
, core
), координатор навигации и архитектуру с одной активностью. Отличный пример для понимания организации модулей и навигации между ними.
Пример приложения, демонстрирующий MVI, Jetpack Compose, Coroutines, Retrofit, Hilt, Room и Navigation Component. Проект хорошо структурирован по feature
-модулям, что позволяет наглядно увидеть разделение функциональности и использование Hilt для DI в контексте MVI и Compose.
Этот репозиторий демонстрирует многомодульное приложение с Clean Architecture, используя комбинацию архитектурных паттернов MVVM и MVI. Включает Jetpack Compose для UI, Navigation Component для навигации и Hilt для внедрения зависимостей. Хороший пример применения принципов чистой архитектуры в модульном проекте.
Android playground-проект с модульностью по фичам (android libraries), unit-тестами, и архитектурами MVVM и MVI. Навигация выделена в отдельный core
модуль, что является интересным подходом. Использует Jetpack Compose и Hilt, предоставляя практический пример для приложений с медиаконтентом.
Демонстрационный проект, показывающий реализацию MVI с Kotlin Coroutines Flow и Jetpack Compose. Включает примеры с Dagger Hilt DI. Акцент сделан на чистую архитектуру и организацию навигации в многомодульном приложении.
Образец приложения на MVI с использованием Jetpack Compose, StateFlow, Hilt и модульной навигации. Этот проект использует продвинутые инструменты для управления состоянием и навигацией, что делает его полезным для изучения современных подходов.
Демонстрационное приложение, использующее паттерн MVI с Jetpack Compose для UI и Hilt для DI. В проекте реализована навигация между модулями с акцентом на чистый код, архитектуру и масштабируемость.
Репозиторий с многомодульной архитектурой (app
, feature
, core
), где в feature
-модулях применяется MVI, Jetpack Compose для UI, Navigation Component для навигации и Hilt для внедрения зависимостей. Включает примеры с Retrofit и Room, показывая интеграцию сетевых вызовов и локального хранения данных.
Демонстрационный проект, сфокусированный на модульной навигации в многомодульном Android-приложении. Реализована навигация между feature
-модулями с использованием современного стека: Hilt для DI и Jetpack Compose для UI. Отличный ресурс для изучения специфики навигационных решений.
Этот репозиторий реализует многомодульную структуру с выделением feature
-модулей. В них используется MVI для управления состояниями и событиями, Jetpack Compose для UI, Navigation Component для навигации и Hilt для DI. Проект демонстрирует интеграцию этих технологий в простом, но полном приложении.
Для лучшего понимания взаимодействия между ключевыми технологиями в современном Android-проекте, давайте рассмотрим следующую ментальную карту. Она иллюстрирует, как многомодульность, MVI, Jetpack Compose, Hilt и Навигация объединяются для создания robust-приложений.
Эта карта показывает, что каждый компонент играет важную роль: многомодульность структурирует проект, MVI управляет состоянием, Compose строит UI, Hilt предоставляет зависимости, а Навигация связывает всё воедино.
Чтобы дать более детальное представление о некоторых из упомянутых репозиториев, ниже представлена радарная диаграмма. Она субъективно оценивает три проекта по ключевым аспектам, таким как строгость реализации MVI, полнота использования Compose, глубина интеграции Hilt, проработанность модульной структуры и гибкость навигационной системы. Оценки варьируются от 3 (хорошо) до 5 (отлично) и отражают общее впечатление от структуры и реализации проекта.
Эта диаграмма помогает визуально сравнить сильные стороны каждого проекта и выбрать тот, который наилучшим образом соответствует вашим учебным или проектным целям. Например, один проект может быть сильнее в демонстрации чистой MVI реализации, тогда как другой — в комплексной модульной структуре.
В таблице ниже представлено краткое описание каждого из ключевых архитектурных компонентов, обсуждаемых в этом обзоре, и их основные преимущества в контексте современной Android-разработки.
Компонент | Описание | Преимущества |
---|---|---|
Многомодульность | Разделение проекта на независимые, переиспользуемые модули (например, app , feature , core ). |
Улучшенная скорость сборки, тестируемость, сопровождаемость, возможность параллельной разработки, инкапсуляция функционала. |
MVI (Model-View-Intent) | Архитектурный паттерн с однонаправленным потоком данных, где View отправляет Intent, Model обрабатывает его и обновляет State, который отображается View. | Предсказуемое управление состоянием, четкое разделение ответственности, упрощение отладки, улучшенная тестируемость бизнес-логики. |
Jetpack Compose | Современный декларативный UI-фреймворк для Android, позволяющий описывать UI как функцию от состояния. | Ускорение разработки UI, сокращение шаблонного кода, мощные инструменты для создания анимаций и кастомных компонентов, интуитивное управление состоянием UI. |
Hilt | Библиотека для внедрения зависимостей, построенная поверх Dagger и оптимизированная для Android. | Стандартизация внедрения зависимостей, значительное снижение шаблонного кода Dagger, легкая интеграция с компонентами Android Jetpack, улучшенная тестируемость. |
Навигация (в feature модулях) |
Управление переходами между экранами и функциональными блоками, особенно в контексте изолированных feature -модулей, часто с использованием Jetpack Navigation Component или координаторов. |
Обеспечение слабой связности между модулями, безопасная передача аргументов между экранами, возможность централизованного управления потоками пользовательского интерфейса. |
Для тех, кто предпочитает визуальное обучение, предлагаю ознакомиться с видеоуроком от Philipp Lackner, который подробно рассказывает об основах многомодульной архитектуры в Android. Хотя видео может не покрывать MVI или Compose в деталях, оно дает отличное представление о том, как начать структурировать ваше приложение на модули.
Видео: "Multi-module Android App Tutorial" от Philipp Lackner.
Изучение практических примеров, подобных тем, что представлены в видео, может значительно ускорить ваше понимание преимуществ и техник реализации модульных приложений.