← Назад к вопросам

Какие знаешь особенности Kotlin Multiplatform?

1.6 Junior🔥 112 комментариев
#Kotlin основы

Комментарии (2)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Особенности Kotlin Multiplatform (KMP)

Kotlin Multiplatform — это технология от JetBrains, позволяющая писать общую бизнес-логику на Kotlin для нескольких платформ (Android, iOS, Web, Desktop), а UI реализовывать нативно для каждой платформы. Вот ключевые особенности KMP:

1. Общий код для бизнес-логики

  • Можно писать код один раз в common модуле, а затем использовать на всех целевых платформах. Это включает обработку данных, сетевые запросы, логику предметной области.
  • Пример структуры модуля в build.gradle.kts:
kotlin {
    androidTarget()
    iosX64()
    iosArm64()
    iosSimulatorArm64()
    
    sourceSets {
        val commonMain by getting {
            dependencies {
                implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3")
            }
        }
        val androidMain by getting
        val iosMain by getting
    }
}

2. Ожидания и фактическая реализация (expect/actual)

  • Механизм expect/actual позволяет объявить ожидаемый API в общем коде и предоставить платформенно-специфичные реализации.
  • Пример объявления платформенно-зависимого ресурса:
// В commonMain
expect class Platform() {
    val name: String
}

// В androidMain
actual class Platform actual constructor() {
    actual val name: String = "Android"
}

// В iosMain
actual class Platform actual constructor() {
    actual val name: String = "iOS"
}

3. Поддержка современных асинхронных операций

  • Общий код может использовать Kotlin Coroutines для асинхронности. На iOS они компилируются в конструкции, совместимые с Grand Central Dispatch.
  • Пример общей suspending функции:
class GreetingService {
    suspend fun greet(): String {
        delay(1000)
        return "Hello from KMP!"
    }
}

4. Совместимость с существующим кодом

  • На Android общий код компилируется в стандартный JVM-байткод и интегрируется как обычная библиотека.
  • На iOS Kotlin компилируется в framework (через Kotlin/Native), который можно использовать в Xcode проектах (Swift/Objective-C).
  • Позволяет постепенно внедрять KMP в существующие приложения, не переписывая всё с нуля.

5. Работа с платформенно-специфичными API

  • Для доступа к нативным API (например, локальному хранилищу, сенсорам) используются интерфейсы с платформенными реализациями или готовые библиотеки-обёртки (например, kstorage для SharedPreferences/Keychain).
  • Можно вызывать нативный код через cinterop (для C/Objective-C на iOS) или JNI (на Android).

6. Сериализация данных

  • Библиотека kotlinx.serialization позволяет сериализовать данные в JSON и обратно в общем коде, что критически важно для сетевых слоёв.
  • Пример:
@Serializable
data class User(val id: Int, val name: String)

val user = Json.decodeFromString<User>("""{"id": 1, "name": "John"}""")

7. Совместное использование библиотек

  • Растущая экосистема мультиплатформенных библиотек (Ktor для сетевых запросов, SQLDelight для базы данных, Koin или Kodein-DI для dependency injection) ускоряет разработку.
  • Можно создавать собственные мультиплатформенные библиотеки для переиспользования в нескольких проектах.

8. Ограничения и сложности

  • UI не является общим — для каждой платформа UI пишется нативно (Jetpack Compose, SwiftUI, React и т.д.). Однако Compose Multiplatform позволяет делать общий UI для Android и Desktop, но не для iOS без дополнительных решений.
  • Сборка и отладка на iOS требуют Mac и Xcode, что усложняет CI/CD для команд, не использующих macOS.
  • Размер итогового iOS-фреймворка может быть значительным, что требует настройки оптимизации (например, исключения неиспользуемых компонентов).
  • Ограничения Kotlin/Native — например, модель памяти с отсутствием сборки мусора и необходимость учитывать заморозку (freezing) объектов при работе с многопоточностью.

9. Интеграция с инструментами разработки

  • Поддержка в Android Studio и IntelliJ IDEA с плагинами для навигации между expect/actual.
  • Генерация Swift-интерфейсов для iOS-фреймворка, что упрощает использование из Swift-кода.
  • Возможность использовать Kotlin/Native для кроссплатформенных desktop-приложений (через Compose Multiplatform или другие UI-фреймворки).

Заключение

Kotlin Multiplatform — это мощный инструмент для сокращения дублирования кода и ускорения разработки кросс-платформенных приложений с нативным UX. Он особенно эффективен для проектов, где требуется общая сложная бизнес-логика (финансы, мессенджеры, корпоративные приложения), но UI должен быть полностью нативным. Однако важно учитывать сложности интеграции с iOS и ограничения Kotlin/Native при планировании архитектуры.

Какие знаешь особенности Kotlin Multiplatform? | PrepBro