Невозможно импортировать зависимости в мультиплатформенном мобильном устройстве 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 (здесь), возможно, вы найдете там подсказку.

Другие вопросы по тегам