Перейти к содержанию
Innovialabs

Что такое Kotlin Multiplatform и когда он оправдан

Основы3 мин

Коротко

Kotlin Multiplatform (KMP) позволяет написать бизнес-логику, работу с сетью и данными один раз на Kotlin и использовать ее в iOS и Android, оставив интерфейс нативным. Он оправдан, когда важны нативный UX и уже есть Android-экспертиза.

Что такое Kotlin Multiplatform

Kotlin Multiplatform (KMP) — технология от JetBrains, которая позволяет писать общий код на Kotlin и компилировать его под разные платформы: Android, iOS, десктоп, веб и сервер.

Главная идея: делить то, что не зависит от платформы, и оставлять нативным то, что от нее зависит. Обычно общими становятся:

  • бизнес-логика и правила;
  • работа с API и сетью;
  • модели данных, валидация, кэш и локальная база;
  • аналитика и обработка ошибок.

Интерфейс при этом можно оставить нативным: Jetpack Compose на Android и SwiftUI на iOS. Для iOS общий код компилируется в обычный нативный фреймворк, который подключается в Xcode как любая другая зависимость.

Как это устроено

Проект делится на source sets: commonMain для общего кода и androidMain, iosMain для платформенного. Когда нужно что-то платформенное, используется механизм expect/actual: в общем коде объявляется ожидание, а каждая платформа дает реализацию.

// commonMain
expect fun platformName(): String

// androidMain
actual fun platformName(): String = "Android"

// iosMain
actual fun platformName(): String = "iOS"

Вокруг KMP сложилась экосистема библиотек: Ktor для сети, kotlinx.serialization для JSON, kotlinx.coroutines для асинхронности, SQLDelight и Room для баз данных.

Compose Multiplatform

Compose Multiplatform — следующий шаг: общий не только код логики, но и UI. Это фреймворк JetBrains на основе Jetpack Compose, который рисует интерфейс на Android, iOS, десктопе и в вебе.

Получается выбор из двух режимов:

  • Только логика общая, UI нативный. Максимальное соответствие платформам, но интерфейс пишется дважды.
  • Логика и UI общие через Compose Multiplatform. Меньше кода, но на iOS интерфейс не будет полностью «яблочным» без дополнительной работы.

Режимы можно смешивать: часть экранов на Compose, часть на SwiftUI.

Зрелость технологии

Kotlin Multiplatform объявлен стабильным, Google официально поддерживает его для общей логики между Android и iOS, а Compose Multiplatform для iOS также получил стабильный статус. Многие крупные компании используют KMP в продакшене.

При этом стоит учитывать:

  • экосистема библиотек меньше, чем у Flutter и React Native;
  • iOS-разработчикам нужно привыкнуть к Kotlin-коду и инструментам сборки Gradle;
  • скорость сборки под iOS и отладка общего кода из Xcode требуют настройки.

Чем отличается от Flutter и React Native

КритерийKotlin MultiplatformFlutterReact Native
ЯзыкKotlinDartJavaScript / TypeScript
Что общееЛогика, по желанию UIЛогика и UIЛогика и UI
UIНативный или ComposeСобственный движок отрисовкиНативные компоненты через JS
ВнедрениеМожно постепенно в существующее приложениеОбычно новое приложениеМожно по экранам, но сложнее
Порог входаНизкий для Android-командыНужно учить DartНизкий для веб-команды

Ключевое отличие: KMP не заставляет менять UI-подход. Его можно внедрять постепенно, начиная с одного модуля, например с сетевого слоя.

Когда KMP оправдан

  • У вас уже есть нативные приложения, и логика в них расходится.
  • В команде сильная Android-экспертиза.
  • Важны нативный UX и производительность, но не хочется дублировать бизнес-логику.
  • Сложная логика: финансы, офлайн-синхронизация, расчеты, где ошибки из-за двух реализаций дорого обходятся.

Когда лучше другой вариант

  • Нужен быстрый MVP силами небольшой команды без Kotlin-опыта — Flutter или React Native могут дать результат быстрее.
  • Команда сильна в вебе и TypeScript — React Native ближе.
  • Приложение простое, и общей логики почти нет.

Частые вопросы

Да. Если UI остается нативным, его пишут на Swift. Даже с Compose Multiplatform нужен человек, который понимает сборку, публикацию и особенности iOS.

Поможем с этим

Если хотите не разбираться самим, а получить результат — этим мы занимаемся каждый день.

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

Читайте также

Есть идея или задача? Расскажите нам

Ответим в течение рабочего дня и предложим решение. Консультация бесплатная.