Кроссплатформенные фреймворки: один код — разные результаты
Flutter, React Native, Jetpack Compose Multiplatform — в чем разница?
Кроссплатформенная разработка позволяет создать приложение для iOS, Android и других платформ с одной кодовой базой. Это хорошо для бизнеса — быстрее запуск, меньше затрат, проще поддержка.
На первый взгляд, технология уже выбрана — можно переходить к разработке. Но это не совсем так: внутри кроссплатформенного подхода есть варианты, которые влияют на стоимость продукта, time-to-market, скорость запуска и другие моменты. Речь о фреймворках, «каркасах» для кода, с которыми работают разработчики.
Flutter — самый популярный кроссплатформенный фреймворк по версии Statista (2023) и Stack Overflow. Поддерживается Google, используется как стартапами, так и крупными компаниями (BMW, Toyota, Tesla).
React Native — разработан компанией Meta (запрещена в РФ), входит в топ-5 кроссплатформенных фреймворков по данным Stack Overflow. Его часто выбирают команды, у которых есть опыт разработки web-приложений на языке JavaScript.
Jetpack Compose Multiplatform — фреймворк от JetBrains и Google. Подходит командам, которые уже используют язык программирования Kotlin — как в мобильной, так и в backend-разработке.
Производительность
Flutter
Интерфейс мобильных приложений на Flutter работает напрямую через собственный графический движок Impeller и не зависит от системных компонентов операционной системы. Благодаря этому есть стабильность и быстрая реакция на действия пользователя — даже если графика сложная.
Интеграция Bluetooth или камеры может внести неопределенность в сроки разработки. Почему? Разные чипсеты (наборы микросхем), оборудование, которое требует вносить изменения в нативные API Android или iOS. Например, плагин для работы с камерой предоставляет только стандартные API, но их недостаточно, если нужна сложная обработка изображений или уникальные режимы съемки.
Как минимизировать риски? Заранее проводить тщательный анализ функционала и обязательно добавлять буфер по времени.
Юрий Петров, Tech Lead FriflexReact Native
Раньше React Native использовал «мост» для связи между кодом и системой — иногда это замедляло работу, особенно при высокой нагрузке. В новой архитектуре данные передаются напрямую, а задачи распределены по разным потокам — это улучшает производительность.
Приложения на React Native работают стабильно как в простых сценариях (каталог, личный кабинет), так и при сложных интерфейсах, где много интерактивных элементов.
Jetpack Compose Multiplatform
Интерфейсы на Android и iOS работают через нативные компоненты. Код связывается напрямую с платформой — это дает полный доступ к системным функциям (Bluetooth, камере и другим) без задержек. Уровень реализации сложных элементов интерфейса — почти нативный.
Скорость запуска
Сроки запуска зависят от проекта — сложности интерфейса, количества платформ, бизнес-требований и состава команды. Ниже — ориентиры для базовой версии продукта (MVP), над которой работает опытная команда.
Flutter
На разработку потребуется 5–8 недель. Один специалист может параллельно писать код под Android, iOS и другие платформы — это сокращает время релизов.
React Native
MVP можно создать за 5–8 недель, сразу для Android и iOS. Благодаря общей архитектуре и коду, время на адаптацию под разные платформы снижается.
Когда сайт уже написан на React с готовой интеграцией с бэкендом, бизнес-логикой и оформлением компонентов, перенос на React Native обычно проходит быстрее и проще — даже если изначально проект не создавался с учетом мобильных особенностей.
Но такой подход ограничивает выбор библиотек и требует высокого уровня архитектуры, чтобы легко синхронизировать изменения. Это значит, что нужны постоянная поддержка и рефакторинг — чтобы код работал правильно.
Юрий Волковский, frontend-разработчик FriflexJetpack Compose Multiplatform
Сроки зависят от задач и состава команды. При работе в одном Kotlin-стеке MVP на Android можно собрать за 5-7 недель и параллельно адаптировать под iOS и desktop. Благодаря общей бизнес-логике и стабильной поддержке iOS, скорость разработки не уступает другим фреймворкам.
Совместимость с платформами
Flutter
Поддерживает Android, iOS, web, Windows, macOS и Linux, а также приложение на Flutter можно адаптировать для ОС Аврора и Harmony OS. Доступны как мобильная версия, так и desktop.
React Native
Поддерживает Android и iOS. Есть неофициальные решения для Windows (например, от Microsoft) и macOS, но они не входят в основной roadmap.
Jetpack Compose Multiplatform
Jetpack Compose Multiplatform поддерживает Android, iOS и desktop — Windows, macOS и Linux. Web-поддержка — пока в экспериментальной стадии.
Compose Multiplatform уже стабильно работает и на Android, и на iOS. Один стек на Kotlin позволяет использовать, например, общие контракты для мобильной и серверной разработки. Также возможность в любой момент получить доступ к платформе напрямую позволяет реализовать любой сценарий через expect/actual типобезопасным (type safety) способом.
Алексей Гладков, автор проекта Mobile developerСтоимость разработки
Выбор фреймворка определяет структуру затрат: если команда работает в одном стеке и управляет продуктом централизованно (использует один код для разных платформ) — стоимость поддержки снижается. Можно быстрее добавлять новые фичи и исправлять ошибки. Еще на бюджет может влиять распространенность технологии — чем меньше специалистов на рынке, тем дороже стоит их нанять и тем сложнее найти команду.
Flutter
Команда: найти опытных Flutter-разработчиков сложно — спрос превышает предложение, особенно на уровне middle и senior.
Код: до 90% общего кода для iOS, Android и других платформ — это снижает затраты на запуск и поддержку.
Дополнительные расходы: возможны при интеграции с системными функциями.
React Native
Команда: один из самых доступных стеков — много специалистов с опытом JavaScript и React.
Код: 70–80% общего кода ускоряют релизы, но UI требует доработки под платформы.
Дополнительные расходы: могут быть связаны с улучшением производительности.
Jetpack Compose Multiplatform
Команда: Kotlin — основной язык для Android и backend-разработки, специалистов найти несложно.
Код: 70–90% общего кода охватывают бизнес-логику и архитектуру. UI адаптируется под каждую платформу, но без дублирования логики.
Дополнительные расходы: могут возникнуть при работе с web и глубокой кастомизацией интерфейса, особенно на desktop.
В двух словах
Flutter — поддерживает iOS, Android, web и desktop. Стабильный, плавный интерфейс для сложных и визуально насыщенных приложений. Позволяет быстро запускать MVP для разных платформ одной командой.
React Native — подходит для Android и iOS. Легко найти команду, особенно при наличии web-экспертизы.
Jetpack Compose Multiplatform — поддерживает Android, iOS и desktop. Подходит для команд с опытом в Kotlin, до 90% общего кода сокращают сроки разработки.
Подробнее о кроссплатформенной разработке — читайте в статье.