Spec-Zone.ru › Kotlin 2

Совместное использование кода на платформах

Kotlin Multiplatform позволяет совместно использовать код с помощью механизмов, предоставляемых Kotlin:

  • Совместное использование кода на всех платформах проекта. Используйте этот подход, чтобы совместно использовать общую бизнес-логику, применимую ко всем платформам.

  • Совместное использование кода на некоторых платформах, включённых в проект, но не на всех. Вы можете повторно использовать код на схожих платформах с помощью иерархической структуры.

Если из общего кода необходимо обращаться к платформенным API, используйте механизм Kotlin для ожидаемых и фактических объявлений.

Совместное использование кода на всех платформах

Если у вас есть бизнес-логика, общая для всех платформ, не нужно писать один и тот же код для каждой платформы — просто используйте его совместно в общем наборе исходного кода.

Code shared for all platforms

Некоторые зависимости для наборов исходного кода задаются по умолчанию. Вам не нужно вручную указывать связи dependsOn:

  • Для всех платформенных наборов исходного кода, которые зависят от общего набора, например jvmMain, macosArm64Main и других.

  • Между наборами исходного кода main и test конкретной цели, например androidMain и androidUnitTest.

Если из общего кода необходимо обращаться к платформенным API, используйте механизм Kotlin для ожидаемых и фактических объявлений.

Совместное использование кода на схожих платформах

Часто необходимо создать несколько нативных целей, которые потенциально могут повторно использовать значительную часть общей логики и сторонних API.

Например, в типичном мультиплатформенном проекте с целевыми платформами iOS есть две цели, связанные с iOS: одна предназначена для устройств iOS с ARM64, другая — для симулятора x64. У них отдельные платформенные наборы исходного кода, но на практике код для устройства и симулятора редко должен различаться, а их зависимости во многом совпадают. Поэтому код для iOS можно использовать совместно в обеих целях.

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

В этом случае можно совместно использовать код для нативных целей проекта с помощью иерархической структуры одним из следующих способов:

  • Использовать шаблон иерархии по умолчанию

  • Настроить иерархическую структуру вручную

Подробнее о том, как совместно использовать код в библиотеках и подключать платформенные библиотеки.

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

Благодаря иерархической структуре проекта библиотеки также могут предоставлять общие API для подмножества целей. При публикации библиотеки API её промежуточных наборов исходного кода включаются в артефакты библиотеки вместе с информацией о структуре проекта. При использовании этой библиотеки промежуточные наборы исходного кода вашего проекта получают доступ только к тем API библиотеки, которые доступны для целей каждого набора исходного кода.

Например, посмотрите на следующую иерархию наборов исходного кода из репозитория kotlinx.coroutines:

Library hierarchical structure

Набор исходного кода concurrent объявляет функцию runBlocking и компилируется для JVM и нативных целей. После обновления и публикации библиотеки kotlinx.coroutines с иерархической структурой проекта вы можете добавить зависимость от неё и вызывать runBlocking из набора исходного кода, общего для JVM и нативных целей, поскольку он соответствует «сигнатуре целей» набора исходного кода concurrent библиотеки.

Подключение платформенных библиотек

Чтобы совместно использовать больше нативного кода без ограничений, связанных с платформенными зависимостями, используйте платформенные библиотеки, такие как Foundation, UIKit и POSIX. Они поставляются вместе с Kotlin/Native и по умолчанию доступны в общих наборах исходного кода.

Кроме того, если в проектах используется плагин Kotlin CocoaPods Gradle, вы можете работать со сторонними нативными библиотеками, подключёнными с помощью механизма cinterop.

Что дальше?

  • Узнайте о механизме Kotlin для ожидаемых и фактических объявлений

  • Подробнее об иерархической структуре проекта

  • Настройте публикацию мультиплатформенной библиотеки

  • Ознакомьтесь с нашими рекомендациями по именованию исходных файлов в мультиплатформенных проектах

16 марта 2026 г.
Выбор конфигурации проекта Kotlin MultiplatformОжидаемые и фактические объявления

© 2010–2026 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/multiplatform/multiplatform-share-on-platforms.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API