Spec-Zone.ru › Kotlin 2

Создание библиотеки Kotlin Multiplatform — руководство

В этом руководстве вы узнаете, как создать мультиплатформенную библиотеку в IntelliJ IDEA, опубликовать её в локальном репозитории Maven и добавить в качестве зависимости в другой проект.

Руководство основано на нашем шаблоне мультиплатформенной библиотеки — простой библиотеке с функцией для генерации последовательности Фибоначчи.

Настройка среды

Установите все необходимые инструменты и обновите их до последних версий.

Создание проекта

  1. В IntelliJ IDEA выберите Файл | Создать | Проект из системы контроля версий.

  2. Введите URL-адрес проекта-шаблона мультиплатформенной библиотеки:

    https://github.com/Kotlin/multiplatform-library-template
    
  3. Нажмите Клонировать.

Изучение структуры проекта

Проект-шаблон библиотеки Kotlin Multiplatform предоставляет базовую структуру для разработки мультиплатформенных библиотек Kotlin. Этот шаблон помогает создавать библиотеки, работающие на различных платформах.

В проекте-шаблоне library служит основным модулем и содержит основной исходный код и ресурсы сборки мультиплатформенной библиотеки.

Multiplatform library project structure

Модуль library организован так, чтобы содержать как общий код, так и реализации для отдельных платформ. Вот обзор его исходного кода:

  • commonMain: содержит код Kotlin, общий для всех целевых платформ. Здесь размещается код, который не зависит от API конкретных платформ.

  • androidMain, iosMain, jvmMain и linuxX64Main: содержат код для платформ Android, iOS, JVM и Linux соответственно. Здесь реализуются функции, специфичные для этих платформ.

  • commonTest, androidUnitTest, iosTest, jvmTest и linuxX64Test: содержат тесты общего кода commonMain и тесты для платформ Android, iOS, JVM и Linux соответственно.

Рассмотрим код library, общий для всех платформ. В каталоге src/commonMain/kotlin находится файл CustomFibi.kt с кодом Kotlin Multiplatform, в котором определена функция-генератор последовательности Фибоначчи:

package io.github.kotlin.fibonacci

// Defines the function to generate the Fibonacci sequence
fun generateFibi() = sequence {
    var a = firstElement
    yield(a)
    
    var b = secondElement
    yield(b)
    
    while (true) {
        val c = a + b
        yield(c)
        a = b
        b = c
    }
}

// Declares the expected values for `firstElement` and `secondElement`
expect val firstElement: Int
expect val secondElement: Int

Свойства firstElement и secondElement — это заглушки, которые может реализовать код для отдельных платформ. Каждая целевая платформа должна задать фактические значения с помощью ключевого слова actual в соответствующем наборе исходного кода.

Объявления expect сопоставляются с реализациями actual. Этот механизм полезен при написании кроссплатформенного кода, требующего поведения, зависящего от платформы.

В этом случае шаблон мультиплатформенной библиотеки включает реализации свойств firstElement и secondElement для отдельных платформ. Каталоги androidMain, iosMain, jvmMain и linuxX64Main содержат объявления actual, задающие значения этих свойств.

Например, вот реализация для Android из androidMain/kotlin/fibiprops.android.kt:

package io.github.kotlin.fibonacci

actual val firstElement: Int = 1
actual val secondElement: Int = 2

В остальных платформах используется тот же подход, но значения свойств firstElement и secondElement отличаются.

Добавление новой платформы

Теперь, когда вы знакомы с принципами работы общего и платформенного кода в шаблоне, расширим проект и добавим поддержку ещё одной платформы.

Настройте поддержку платформы Kotlin/Wasm с помощью механизма expect / actual, а затем реализуйте платформенную функциональность для свойств firstElement и secondElement.

Добавление целевой платформы Kotlin/Wasm в проект

  1. Добавьте целевую платформу Kotlin/Wasm (wasmJs) и наборы исходного кода в файл library/build.gradle.kts:

    kotlin {
        // ...
        @OptIn(org.jetbrains.kotlin.gradle.ExperimentalWasmDsl::class)
        wasmJs {
            browser()
            binaries.executable()
        }
        // ...
        sourceSets {
            //...
            wasmJsMain.dependencies {
                // Wasm-specific dependencies
            }
        }
    }
    
  2. Синхронизируйте файлы Gradle, нажав значок Синхронизировать изменения Gradle (Gradle sync icon), который появится в файле сборки. Также можно нажать кнопку обновления в окне инструмента Gradle.

Создание платформенного кода для Wasm

После добавления целевой платформы Wasm понадобится каталог Wasm для платформенной реализации firstElement и secondElement:

  1. Щёлкните правой кнопкой мыши каталог library/src и выберите Создать | Каталог.

  2. Выберите wasmJsMain/kotlin в списках Наборы исходного кода Gradle.

    Gradle source sets list
  3. Щёлкните правой кнопкой мыши созданный каталог wasmJsMain/kotlin и выберите Создать | Класс/файл Kotlin.

  4. Введите fibiprops.wasm в качестве имени файла и выберите Файл.

  5. Добавьте следующий код в файл fibiprops.wasm.kt:

    package io.github.kotlin.fibonacci
    
    actual val firstElement: Int = 3
    actual val secondElement: Int = 5
    

    Этот код задаёт реализацию для Wasm, определяя значения actual для firstElement как 3, а для secondElement — как 5.

Сборка проекта

Убедитесь, что проект успешно компилируется с новой платформой:

  1. Откройте окно инструмента Gradle, выбрав Вид | Окна инструментов | Gradle.

  2. В разделе multiplatform-library-template | library | Задачи | build запустите задачу build.

    Gradle tool window

    Также можно выполнить в терминале следующую команду из корневого каталога multiplatform-library-template:

    ./gradlew build
    

Успешный результат можно увидеть в окне инструмента Сборка.

Публикация библиотеки в локальном репозитории Maven

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

Для публикации библиотеки используйте плагин Gradle maven-publish следующим образом:

  1. Найдите блок plugins { } в файле library/build.gradle.kts и примените плагин maven-publish:

       plugins {
           // ...
           // Add the following line:
           id("maven-publish")
       }
    
  2. Найдите блок mavenPublishing {} и закомментируйте вызов signAllPublications(), чтобы указать, что публикация предназначена только для локального использования:

    mavenPublishing {
        // ...
        // Comment out the following call:
        // signAllPublications()
    }
    
  3. Синхронизируйте файлы Gradle, нажав значок Синхронизировать изменения Gradle (Gradle sync icon), который появится в файле сборки. Также можно нажать кнопку обновления в окне инструмента Gradle.

  4. В окне инструмента Gradle перейдите в раздел multiplatform-library-template | Задачи | publishing и запустите задачу Gradle publishToMavenLocal.

    Multiplatform library Gradle tool window

    Также можно выполнить в терминале следующую команду из корневого каталога multiplatform-library-template:

    ./gradlew publishToMavenLocal
    

Библиотека опубликована в локальном репозитории Maven.

Чтобы найти опубликованные артефакты, откройте в файловом менеджере или терминале каталог ~\.m2\repository\io\github\kotlin\library\1.0.0\.

Добавление библиотеки в качестве зависимости в другой проект

После публикации мультиплатформенной библиотеки в локальном репозитории Maven её можно использовать в других проектах Kotlin на том же компьютере.

Добавьте в файл settings.gradle.kts проекта-потребителя параметр для поиска пакетов в локальном репозитории:

dependencyResolutionManagement {
    repositories {
        // ...
        mavenLocal()
    }
}

Добавьте зависимость от опубликованной библиотеки в файл build.gradle.kts модуля. Если вы добавляете её в другой мультиплатформенный проект, её можно добавить в общие или платформенные наборы исходного кода:

kotlin {
    //...
    sourceSets {
        // For all platforms
        commonMain.dependencies {
                implementation("io.github.kotlin:library:1.0.0")
        }
        // Or for a specific platforms
        wasmJsMain.dependencies {
            implementation("io.github.kotlin:library:1.0.0")
        }
    }
}

Вызов implementation() принимает группу, имя и версию библиотеки, указанные в её файле build.gradle.kts.

Синхронизируйте проект-потребитель и начните использовать библиотеку, например:

import io.github.kotlin.fibonacci.generateFibi

val seq = generateFibi()
println(seq.elementAt(3))

Что дальше

Рекомендуем продолжить изучение мультиплатформенной разработки:

  • Опубликуйте библиотеку в Maven Central

  • Ознакомьтесь с рекомендациями для авторов библиотек

Присоединяйтесь к сообществу:

  • GitHub GitHub Compose Multiplatform: поставьте звезду репозиторию и внесите свой вклад

  • Slack Kotlin Slack: получите приглашение и присоединитесь к каналу #multiplatform

  • Stack Overflow Stack Overflow: подпишитесь на тег «kotlin-multiplatform»

  • YouTube YouTube-канал Kotlin: подпишитесь и смотрите видео о Kotlin Multiplatform

21 июля 2026
Создание мультиплатформенного приложения с использованием Ktor и SQLDelightОсновы структуры проекта 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/create-kotlin-multiplatform-library.html

Spec-Zone.ru

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