Невозможно импортировать зависимости в мультиплатформенном мобильном устройстве kotlin
Я создал новый мультиплатформенный мобильный проект kotlin. Я следил за официальной документацией. Базовый проект рабочий, смог без проблем собрать его на андроиде.
Я хотел добавить api и нашел, что никогда раньше не использовал. Я следил за документами здесь: https://kotlinlang.org/docs/mobile/use-ktor-for-networking.html и учебником здесь: https://proandroiddev.com/kotlin-multiplatform-very-beginners-guide-part-2-api-d54f7326dc57 и все внесенные мной изменения:
я добавил
ktor
библиотеки в
build.gradle.kts(:shared)
:
sourceSets {
val commonMain by getting {
dependencies {
implementation ("io.ktor:ktor-client-core:1.5.0")
}
}
val commonTest by getting {
dependencies {
implementation(kotlin("test-common"))
implementation(kotlin("test-annotations-common"))
}
}
val androidMain by getting {
dependencies {
implementation("com.google.android.material:material:1.2.1")
implementation("io.ktor:ktor-client-android:1.5.0")
}
}
val androidTest by getting {
dependencies {
implementation(kotlin("test-junit"))
implementation("junit:junit:4.13")
}
}
val iosMain by getting {
dependencies {
implementation("io.ktor:ktor-client-ios:1.5.0")
}
}
val iosTest by getting
}
И я создал
Api
класс, в котором я хотел создать и использовать
HttpClient
:
class Api() {
private val client = HttpClient()
suspend fun fetch(): String {
return ""
}
}
НО
HttpCLient()
является «неразрешенной ссылкой», и ее нельзя импортировать. Еще пробовал вручную добавить импорт
io.ktor.client.HttpClient
но
io
"Неразрешенная ссылка". Также я пробовал множество перестроек / чисток / синхронизаций. Что я делаю неправильно? Я что-то пропустил?
2 ответа
Я столкнулся с той же проблемой в Windows 7 с Android Studio 4.1.3. Это было решено, когда в скрипте сборки проекта в разделе dependencies скрипта сборки была обновлена версия артефакта kotlin-gradle-plugin с 1.4.10 до 1.4.32. Ниже представлена копия вставки из проекта build.gradle.kts:
buildscript {
repositories {
gradlePluginPortal()
jcenter()
google()
mavenCentral()
}
dependencies {
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.4.32")
classpath("com.android.tools.build:gradle:4.1.3")
}
}
Используя IntelliJ IDEA Ultimate 2020.3, я создал проект KMM из File->New...->Project. Затем я добавил ktor в качестве зависимостей точно так же, как вы это сделали в коде, включенном в ваш вопрос. При создании
ApiClient
класс, как и ваш, у меня это сработало как в
androidMain
так же хорошо как
commonMain
исходный набор, с автоматическим импортом IDEA
HttpClient
.
Так как я не могу воспроизвести это, я боюсь, что, не зная точного кода, который вы используете, мне будет трудно помочь.
Однако, на всякий случай, это может помочь, я разместил свой минимальный проект на Github (здесь), возможно, вы найдете там подсказку.