
Как мы мигрируем навигацию на Compose в Android-приложениях с 400+ экранами
horseunnamed 20 минут назад Как мы мигрируем навигацию на Compose в Android-приложениях с 400+ экранами Средний 12 мин 725 Блог компании hh.ru Android * Jetpack Compose * Разработка мобильных приложений * Кейс Привет,...
GPT-5.6 31 Temmuz 2026'da yayınlanacak mı?
Вот важная новость с фронта ИИ: horseunnamed 20 минут назад Как мы мигрируем навигацию на Compose в Android-приложениях с 400+ экранами Средний 12 мин 725 Блог компании hh. ru Android * Jetpack Compose * Разработка мобильных приложений * Кейс Привет, Хабр! Меня зовут Константин Дубинко, я — Android-техлид в hh.
Сейчас мы заканчиваем большой переезд навигации в двух Android-приложениях — для соискателей и работодателей. В этой статье я покажу, как у нас там устроена навигация, почему мы решили отказаться от Fragment-навигации и как превратили хаотичную миграцию с «островками» новой архитектуры в управляемый процесс с метриками и понятным планом работ. Заодно расскажу, какие решения сработали, какие — нет, и что я сделал бы иначе, если бы начинал заново.
Технические детали
Масштаб миграцииВ двух наших Android-приложениях — для соискателей и работодателей — больше 400 экранов, около тысячи навигационных переходов и примерно 70 диплинков. Часть модулей и экранов переиспользуется между приложениями, поэтому наши приложения живут внутри одного Gradle-проекта в едином репозитории. На данный момент в репозиторий контрибьютит 14 продуктовых команд, в каждой в среднем по два Android-разработчика.
Наш Android-репозиторий появился ещё в далеком 2013 году, тогда все экраны жили на отдельных Activity. В 2018 году мы перешли на подход Single Activity с экранами на базе Fragment. А в 2022 начали уходить от фрагментов в сторону Compose-first подхода.
Полностью миграцию мы ещё не завершили, но большая часть работы уже проделана. Контейнеры навигацииДля моего рассказа будет важно понятие контейнера навигации — это область интерфейса приложения, внутри которой мы переключаем экраны. Типичный пример контейнера навигации в мобильных приложениях — стек экранов: при переходе мы кладём новый экран поверх предыдущих и показываем его как активный.
Отраслевые последствия
Переход в стеке экранов на примере фичи авторизацииВ наших приложениях навигационные контейнеры вложены друг в друга. Например, экран может одновременно быть частью общего стека приложения и при этом содержать собственный стек подэкранов. Например, так устроен экран создания резюме: каждый этап заполнения открывается как отдельный подэкран внутри общего сценария.
Такой подход позволяет шарить общий UI и бизнес-логику сценария, а ещё — декомпозировать навигацию на подграфы отдельных сценариев навигации. Переход внутри вложенного стека навигации на примере заполнения резюме. Родительский экран-контейнер рисует общий прогресс заполнения резюме и шарит общую логику редактирования.
Есть и другой тип контейнеров — multistack. Это навигация на главном экране между основными разделами приложений через нижнюю панель. По сути, при переключении вкладки мы переключаем активный стек экранов.
Этот прогресс даёт важные сигналы о будущем отрасли, и технологический мир внимательно наблюдает.





