Spec-Zone.ru › Kotlin 1.7

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

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

Чтобы добавить зависимость от библиотеки, обновите свой файл build.gradle(.kts) в каталоге shared вашего проекта. Установите зависимость требуемого типа (например, implementation) в блоке dependencies:

kotlin {
    sourceSets {
        val commonMain by getting {
            dependencies {
                implementation("com.example:my-library:1.0") // library shared for all source sets
            }
        }
    }
}
kotlin {
    sourceSets {
        commonMain {
            dependencies {
                implementation 'com.example:my-library:1.0'
            }
        }
    }
}

В качестве альтернативы можно установить зависимости на верхнем уровне.

Зависимость от библиотеки Kotlin

Стандартная библиотека

Зависимость от стандартной библиотеки (stdlib) в каждом наборе исходных данных добавляется автоматически. Версия стандартной библиотеки совпадает с версией плагина kotlin-multiplatform.

Для наборов исходных данных, специфичных для платформы, используется соответствующий платформенно-специфичный вариант библиотеки, а общая стандартная библиотека добавляется к остальным. Плагин Kotlin Gradle выберет соответствующую стандартную JVM-библиотеку в зависимости от kotlinOptions.jvmTarget параметра компилятора вашего скрипта Gradle.

Узнайте, как изменить поведение по умолчанию.

Библиотеки тестов

kotlin.test API доступен для многоплатформенных тестов. При создании многоплатформенного проекта мастер проекта автоматически добавляет зависимости для тестов в общие и платформенно-специфичные наборы исходных данных.

Если вы не использовали мастер проекта для создания своего проекта, вы можете добавить зависимости вручную.

Библиотеки kotlinx

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

kotlin {
    sourceSets {
        val commonMain by getting {
            dependencies {
                implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4")
            }
        }
    }
}
kotlin {
    sourceSets {
        commonMain {
            dependencies {
                implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4'
            }
        }
    }
}

Если вы используете библиотеку kotlinx и вам нужна платформенно-специфичная зависимость, вы можете использовать платформенно-специфичные варианты библиотек с суффиксами, такими как -jvm или -js, например, kotlinx-coroutines-core-jvm.

kotlin {
    sourceSets {
        val jvmMain by getting {
            dependencies {
                implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4")
            }
        }
    }
}

kotlin {
    sourceSets {
        jvmMain {
            dependencies {
                implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4'
            }
        }
    }
}

Зависимость от многоплатформенных библиотек Kotlin

Вы можете добавить зависимости от библиотек, которые приняли технологию Kotlin Multiplatform, такие как SQLDelight. Авторы этих библиотек обычно предоставляют руководства по добавлению своих зависимостей в ваш проект.

Посмотрите этот поддерживаемый сообществом список многоплатформенных библиотек Kotlin.

Библиотека, общая для всех наборов исходных данных

Если вы хотите использовать библиотеку из всех наборов исходных данных, вы можете добавить ее только в общий набор исходных данных. Плагин Kotlin Multiplatform Mobile автоматически добавит соответствующие части кода во все другие наборы исходных данных.

Нельзя устанавливать зависимости от платформенно-специфичных библиотек в общем наборе исходных данных.

kotlin {
    sourceSets {
        val commonMain by getting {
            dependencies {
                implementation("io.ktor:ktor-client-core:2.1.1")
            }
        }
        val androidMain by getting {
            dependencies {
                // dependency to a platform part of ktor-client will be added automatically
            }
        }
    }
}
kotlin {
    sourceSets {
        commonMain {
            dependencies {
                implementation 'io.ktor:ktor-client-core:2.1.1'
            }
        }
        androidMain {
            dependencies {
                // dependency to platform part of ktor-client will be added automatically
            }
        }
    }
}

Библиотека, используемая в определённых наборах исходных данных

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

В таких случаях не используйте платформенно-специфическое имя, например, SQLDelight native-driver в примере ниже. Найдите точное имя в документации библиотеки.

kotlin {
    sourceSets {
        val commonMain by getting {
            dependencies {
                // kotlinx.coroutines will be available in all source sets
                implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4")
            }
        }
        val androidMain by getting {
            dependencies {}
        }
        val iosMain by getting {
            dependencies {
                // SQLDelight will be available only in the iOS source set, but not in Android or common
                implementation("com.squareup.sqldelight:native-driver:1.4.1")
            }
        }
    }
}
kotlin {
    sourceSets {
        commonMain {
            dependencies {
                // kotlinx.coroutines will be available in all source sets
                implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4'
            }
        }
        androidMain {
            dependencies {}
        }
        iosMain {
            dependencies {
                // SQLDelight will be available only in the iOS source set, but not in Android or common
                implementation 'com.squareup.sqldelight:native-driver:1.4.1'
            }
        }
    }
}

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

Это известная проблема, и мы работаем над её решением. Тем временем вы можете использовать это обходное решение.

Зависимость от другого многоплатформенного проекта

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

kotlin {
    sourceSets {
        val commonMain by getting {
            dependencies {
                implementation(project(":some-other-multiplatform-module"))
            }
        }
        val androidMain by getting {
            dependencies {
                // platform part of :some-other-multiplatform-module will be added automatically
            }
        }
    }
}
kotlin {
    sourceSets {
        commonMain {
            dependencies {
                implementation project(':some-other-multiplatform-module')
            }
        }
        androidMain {
            dependencies {
                // platform part of :some-other-multiplatform-module will be added automatically
            }
        }
    }
}

Что дальше?

Посмотрите другие ресурсы о добавлении зависимостей в многоплатформенных проектах и узнайте больше о:

  • Добавление зависимостей Android

  • Добавление зависимостей iOS

Последнее изменение: 22 июля 2022
Иерархическая структура проекта Добавление зависимостей Android

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

Spec-Zone.ru

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