Кроссплатформенная разработка — одна из самых динамично развивающихся областей мобильной инженерии. По данным Statista (2025), 42% мобильных разработчиков используют Flutter или React Native в своих проектах. Платформенные каналы, мосты и нативные модули — основа кроссплатформенной архитектуры.
Главное
Flutter — фреймворк Google для создания нативных приложений из единой кодовой базы на Dart. Для взаимодействия с платформенным кодом (Kotlin, Swift) Flutter использует Platform Channel. Это мост, через который Dart-код вызывает нативные функции и получает результат. Кроссплатформенная разработка мобильных приложений на Flutter — самый быстрорастущий сегмент мобильной разработки в 2025–2026 годах.
Method Channel — основной канал связи Flutter <-> Native. На Dart-стороне: MethodChannel('com.example/channel').invokeMethod('getBatteryLevel'). Сообщение кодируется в StandardMethodCodec (binary). На нативной стороне регистрируется MethodChannel и обрабатывает вызов. MethodChannel асинхронный — результат возвращается через Future. Альтернатива: EventChannel для потока событий (stream).
BasicMessageChannel — более низкоуровневый канал для передачи строк/байтов без структуры "метод-аргументы". Используется для кастомных протоколов. Всё Platform Channel API проходит через Flutter Engine, который сериализует/десериализует сообщения.
dart:ffi (Foreign Function Interface) — прямой вызов C-функций из Dart без платформенных каналов. FFI быстрее Method Channel (0 накладных расходов на сериализацию). Используется для производительных операций: обработка звука, криптография, графические движки. Skia — рендер-движок Flutter (2D графика). Impeller — новый рендер-движок Flutter, который заменяет Skia. Impeller компилирует шейдеры заранее (Ahead-of-Time), что устраняет jank (зависания кадров) на первых запусках. В IT Sectr мы перешли на Impeller в 2025 — разница в плавности анимаций заметна сразу.
React Native — фреймворк Meta для кроссплатформенной разработки мобильных приложений на JavaScript/TypeScript. React Native рендерит компоненты в нативные UI-элементы. Архитектура прошла эволюцию: старый Bridge → новый Fabric с JSI.
Bridge — старая архитектура React Native. JS-поток сериализует сообщения в JSON и отправляет через асинхронную очередь в нативный поток. Это создаёт задержки (bridge round-trip ~1 мс). Fabric — новая архитектура, где JS- и нативный UI-потоки общаются синхронно через JSI (JavaScript Interface). Fabric внедряет нативные представления напрямую, без моста. Fabric — ключевой этап кроссплатформенной разработки, ускоряющий рендеринг до 2x.
JSI (JavaScript Interface) — C++ API, который позволяет JavaScript напрямую вызывать нативные функции и разделять память. JSI заменил JSON-сериализацию Bridge. Новая архитектура на JSI — важнейшее достижение кроссплатформенной разработки, определяющее производительность мобильных приложений. Turbo Module — новый способ написания нативных модулей для React Native. В отличие от старых Native Modules, Turbo Module загружается лениво и использует JSI.
Hermes — JavaScript-движок от Meta, оптимизированный для React Native. Hermes компилирует JS-код в байткод на этапе сборки, что ускоряет запуск мобильных приложений и снижает потребление памяти при кроссплатформенной разработке. Codegen — генератор нативного кода по типам TypeScript. Codegen автоматически создаёт нативные модули и JSI-связки, уменьшая ручную работу.
| Параметр | Flutter | React Native | KMP |
|---|---|---|---|
| Язык | Dart | JavaScript/TypeScript | Kotlin |
| Архитектура | Skia/Impeller (собственный рендер) | Fabric + JSI (нативные UI) | Нативный SDK (каждый модуль) |
| Нативный мост | MethodChannel (Dart ↔ Native) | JSI (JS ↔ C++ ↔ Native) | expect/actual (Kotlin ↔ Native) |
| UI | Собственный (Skia/Impeller) | Нативные компоненты (UIKit/Android Views) | Нативный UI (Jetpack Compose, SwiftUI) |
| Рендер-движок | Skia или Impeller | Нативный (UIView/View) | Нативный |
Flutter рисует всё сам через Skia/Impeller — это даёт единый UI на обеих платформах. React Native использует нативные UI-компоненты — это выглядит как нативное приложение. KMP не занимается UI — он разделяет только бизнес-логику, UI остаётся нативным. Выбор зависит от приоритета: единый UI (Flutter) или максимальная нативность (React Native/KMP).
Kotlin Multiplatform (KMP) — технология JetBrains для shared-кода между Android и iOS. В отличие от Flutter и React Native, KMP — альтернативный подход к кроссплатформенной разработке: он не заменяет UI, а разделяет бизнес-логику, сетевые запросы, модели данных и репозитории. UI остаётся нативным: Jetpack Compose для Android, SwiftUI для iOS.
expect — объявление функции или класса в общем модуле (commonMain), который имеет платформенную реализацию. Кроссплатформенная разработка на KMP использует expect/actual: actual — конкретная реализация для каждой платформы (androidMain, iosMain). Пример: expect fun getDeviceId(): String — на Android actual использует Settings.Secure, на iOS — UIDevice.current.identifierForVendor.
Kotlin/Native — компилятор Kotlin в нативный бинарник (iOS framework). Он позволяет запускать Kotlin-код на iOS без JVM. Kotlin/Native использует LLVM для компиляции, что даёт производительность, близкую к Swift. Kotlin/JS — компиляция Kotlin в JavaScript для веб- и React Native-проектов.
Инструменты сборки кроссплатформенной разработки мобильных приложений — мост между кодом и конечным бинарником. Gradle KTS управляет Android-частью, CocoaPods Plugin — iOS-зависимостями KMP, XCFramework — распространением нативных библиотек.
Gradle KTS — конфигурация Gradle на Kotlin DSL вместо Groovy. KTS поддерживает автодополнение в Android Studio, проверку типов и безопасность рефакторинга. Пример: plugins { id("com.android.application") } вместо apply plugin: 'com.android.application'. Рекомендуется для всех новых проектов.
CocoaPods Plugin — Gradle-плагин для KMP, который публикует shared-модуль как CocoaPods pod. iOS-разработчик подключает его через Podfile. XCFramework — формат распространения бинарных библиотек Apple. XCFramework содержит бинарники для нескольких архитектур (arm64, x86_64) и платформ (iOS, macOS, watchOS). В KMP shared-модуль экспортируется как XCFramework для iOS.
Часто задаваемые вопросы
Flutter даёт лучшую производительность (Skia/Impeller), единую кодобазу UI и высокую стабильность при кроссплатформенной разработке. React Native — огромное сообщество, лёгкий переход с веб-разработки и гибкость через JSI. IT Sectr рекомендует Flutter для проектов с UI, React Native — если проект требует частого нативного кода.
Flutter отправляет сообщение через MethodChannel на Dart-стороне. Сообщение кодируется в бинарный формат и передаётся на нативную сторону (Kotlin/Swift), где обрабатывается и возвращает результат. Вся коммуникация при разработке мобильных приложений асинхронная.
expect — это объявление функции или класса в общем коде, который имеет платформенную реализацию. actual — конкретная реализация для каждой платформы (Android/iOS). Это механизм KMP для условной компиляции без препроцессора.
Bridge — старая архитектура, где сообщения сериализуются в JSON и передаются асинхронно через очередь. Fabric — новая архитектура с синхронным вызовом нативных функций через JSI, что устраняет задержки и улучшает производительность мобильных приложений.
Hermes — это JavaScript-движок от Meta, оптимизированный для React Native. Он компилирует JS в байткод на этапе сборки, что ускоряет запуск приложения в 2–3 раза и снижает потребление памяти.
Итоги
Мы разработаем мобильное приложение под ключ
IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.