Кроссплатформенная разработка в мобильных приложениях: что это, какие фреймворки и как работает

Автор: IT Sectr Опубликовано: 2026-06-06 Время чтения: 9 мин

Кроссплатформенная разработка — одна из самых динамично развивающихся областей мобильной инженерии. По данным Statista (2025), 42% мобильных разработчиков используют Flutter или React Native в своих проектах. Платформенные каналы, мосты и нативные модули — основа кроссплатформенной архитектуры.

Главное

  • Flutter использует Platform Channel (MethodChannel) для общения с нативным кодом. Сообщения сериализуются в бинарный формат и передаются асинхронно.
  • React Native использует Bridge (старая архитектура) и Fabric (новая). Fabric использует JSI для синхронного вызова нативных функций.
  • Kotlin Multiplatform использует expect/actual — объявление и платформенная реализация. Kotlin/Native компилирует код напрямую в iOS binary.
  • Инструменты сборки кроссплатформенной разработки: Gradle KTS (Kotlin DSL для Gradle), CocoaPods Plugin (управление зависимостями iOS), XCFramework (распространение нативных библиотек).
  • Skia (Flutter) и Impeller — рендер-движки. Impeller новее, быстрее и решает проблемы jank на старых устройствах.

Кроссплатформенная разработка: Flutter Platform Channel и Method Channel

Flutter — фреймворк Google для создания нативных приложений из единой кодовой базы на Dart. Для взаимодействия с платформенным кодом (Kotlin, Swift) Flutter использует Platform Channel. Это мост, через который Dart-код вызывает нативные функции и получает результат. Кроссплатформенная разработка мобильных приложений на Flutter — самый быстрорастущий сегмент мобильной разработки в 2025–2026 годах.

Platform Channel (Method Channel)

Method Channel — основной канал связи Flutter <-> Native. На Dart-стороне: MethodChannel('com.example/channel').invokeMethod('getBatteryLevel'). Сообщение кодируется в StandardMethodCodec (binary). На нативной стороне регистрируется MethodChannel и обрабатывает вызов. MethodChannel асинхронный — результат возвращается через Future. Альтернатива: EventChannel для потока событий (stream).

BasicMessageChannel — более низкоуровневый канал для передачи строк/байтов без структуры "метод-аргументы". Используется для кастомных протоколов. Всё Platform Channel API проходит через Flutter Engine, который сериализует/десериализует сообщения.

FFI, Skia и Impeller

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: Bridge, Fabric, Hermes, JSI

React Native — фреймворк Meta для кроссплатформенной разработки мобильных приложений на JavaScript/TypeScript. React Native рендерит компоненты в нативные UI-элементы. Архитектура прошла эволюцию: старый Bridge → новый Fabric с JSI.

Fabric vs Bridge

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 и Codegen

Hermes — JavaScript-движок от Meta, оптимизированный для React Native. Hermes компилирует JS-код в байткод на этапе сборки, что ускоряет запуск мобильных приложений и снижает потребление памяти при кроссплатформенной разработке. Codegen — генератор нативного кода по типам TypeScript. Codegen автоматически создаёт нативные модули и JSI-связки, уменьшая ручную работу.

Параметр Flutter React Native KMP
ЯзыкDartJavaScript/TypeScriptKotlin
Архитектура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: expect/actual, Kotlin/Native

Kotlin Multiplatform (KMP) — технология JetBrains для shared-кода между Android и iOS. В отличие от Flutter и React Native, KMP — альтернативный подход к кроссплатформенной разработке: он не заменяет UI, а разделяет бизнес-логику, сетевые запросы, модели данных и репозитории. UI остаётся нативным: Jetpack Compose для Android, SwiftUI для iOS.

expect/actual

expect — объявление функции или класса в общем модуле (commonMain), который имеет платформенную реализацию. Кроссплатформенная разработка на KMP использует expect/actual: actual — конкретная реализация для каждой платформы (androidMain, iosMain). Пример: expect fun getDeviceId(): String — на Android actual использует Settings.Secure, на iOS — UIDevice.current.identifierForVendor.

Kotlin/Native

Kotlin/Native — компилятор Kotlin в нативный бинарник (iOS framework). Он позволяет запускать Kotlin-код на iOS без JVM. Kotlin/Native использует LLVM для компиляции, что даёт производительность, близкую к Swift. Kotlin/JS — компиляция Kotlin в JavaScript для веб- и React Native-проектов.

Инструменты сборки: Gradle KTS, CocoaPods Plugin, XCFramework

Инструменты сборки кроссплатформенной разработки мобильных приложений — мост между кодом и конечным бинарником. Gradle KTS управляет Android-частью, CocoaPods Plugin — iOS-зависимостями KMP, XCFramework — распространением нативных библиотек.

Gradle KTS

Gradle KTS — конфигурация Gradle на Kotlin DSL вместо Groovy. KTS поддерживает автодополнение в Android Studio, проверку типов и безопасность рефакторинга. Пример: plugins { id("com.android.application") } вместо apply plugin: 'com.android.application'. Рекомендуется для всех новых проектов.

CocoaPods Plugin и XCFramework

CocoaPods Plugin — Gradle-плагин для KMP, который публикует shared-модуль как CocoaPods pod. iOS-разработчик подключает его через Podfile. XCFramework — формат распространения бинарных библиотек Apple. XCFramework содержит бинарники для нескольких архитектур (arm64, x86_64) и платформ (iOS, macOS, watchOS). В KMP shared-модуль экспортируется как XCFramework для iOS.

Часто задаваемые вопросы

Что выбрать: Flutter или React Native в 2026 году?

Flutter даёт лучшую производительность (Skia/Impeller), единую кодобазу UI и высокую стабильность при кроссплатформенной разработке. React Native — огромное сообщество, лёгкий переход с веб-разработки и гибкость через JSI. IT Sectr рекомендует Flutter для проектов с UI, React Native — если проект требует частого нативного кода.

Как Flutter общается с нативным кодом через Platform Channel?

Flutter отправляет сообщение через MethodChannel на Dart-стороне. Сообщение кодируется в бинарный формат и передаётся на нативную сторону (Kotlin/Swift), где обрабатывается и возвращает результат. Вся коммуникация при разработке мобильных приложений асинхронная.

Что такое expect/actual в Kotlin Multiplatform?

expect — это объявление функции или класса в общем коде, который имеет платформенную реализацию. actual — конкретная реализация для каждой платформы (Android/iOS). Это механизм KMP для условной компиляции без препроцессора.

В чём разница между Fabric и Bridge в React Native?

Bridge — старая архитектура, где сообщения сериализуются в JSON и передаются асинхронно через очередь. Fabric — новая архитектура с синхронным вызовом нативных функций через JSI, что устраняет задержки и улучшает производительность мобильных приложений.

Что такое Hermes и зачем он нужен React Native?

Hermes — это JavaScript-движок от Meta, оптимизированный для React Native. Он компилирует JS в байткод на этапе сборки, что ускоряет запуск приложения в 2–3 раза и снижает потребление памяти.

Итоги

  • Flutter использует Platform Channel (MethodChannel) для связи с нативным кодом. FFI — для прямого вызова C-функций без накладных расходов.
  • React Native перешёл с Bridge на Fabric + JSI. JSI позволяет синхронно вызывать нативные функции, устраняя задержки моста.
  • Kotlin Multiplatform использует expect/actual для платформенного кода. Kotlin/Native компилирует общий код в нативный фреймворк iOS.
  • Кроссплатформенная разработка мобильных приложений на Flutter использует Skia/Impeller, на React Native — JSI/Fabric, на KMP — expect/actual для нативного кода.
  • Hermes — JS-движок для React Native. Ускоряет запуск и снижает потребление памяти.
  • Gradle KTS — Kotlin DSL для Gradle. CocoaPods Plugin и XCFramework — для распространения iOS-бинарников в кроссплатформенной разработке.
  • Выбор фреймворка: Flutter для единого UI, React Native для нативного UI с JS, KMP для разделения бизнес-логики с нативным UI.
  • При выборе технологии кроссплатформенной разработки мобильных приложений опирайтесь на требования к производительности и размер команды.

Мы разработаем мобильное приложение под ключ

IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.

Обсудить проект