У меня проблема с IDE Android Studio при использовании зависимости ktor для набора исходных кодов commonMain с мультиплатформой kotlin. Проблема в том, что IDE не распознает эту зависимость, но программа компилируется и работает нормально. Кроме того, в исходном наборе androidMain зависимость распознается. Я видел другие вопросы по аналогичным проблемам, но я не видел никого с этой проблемой, когда программа компилируется и запускается.
Зависимости Gradle
Следующее находится в build.gradle.kts в общей папке проекта.
kotlin {
android()
ios {
binaries {
framework {
baseName = "shared"
}
}
}
sourceSets {
val commonMain by getting {
dependencies {
implementation("io.ktor:ktor-client-core:1.5.1")
implementation("io.ktor:ktor-client-cio:1.5.1")
}
}
val androidMain by getting {
dependencies {
implementation("com.google.android.material:material:1.2.1")
implementation("io.ktor:ktor-client-android:1.5.1")
}
}
...
}
}
где точки представляют зависимости для других наборов источников, например iosMain, который пуст.
В коде commonMain у меня есть класс KtorTest:
package com.example.myapplication222.shared
import io.ktor.client.*
import io.ktor.client.engine.cio.*
import io.ktor.client.request.*
class KtorTest {
val client: HttpClient = HttpClient(CIO)
suspend fun get(): String {
val res: String = client.get("http://www.7timer.info/bin/api.pl?lon=113.17&lat=23.09&product=astro&output=json")
return res
}
}
Основная деятельность
В основном действии я импортирую и использую класс KtorTest для выполнения запроса на получение.
package com.example.myapplication222.androidApp
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.example.myapplication222.shared.KtorTest
import kotlinx.coroutines.*
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
var response = ""
val c = GlobalScope.launch {
response = get()
}
c.invokeOnCompletion {
println("***RESPONSE***");
println(response) }
}
suspend fun get(): String {
val a = KtorTest()
return a.get()
}
}
Результат
Программа строит, запускает и распечатывает следующее.
I/System.out: ***RESPONSE***
{
"product" : "astro" ,
"init" : "2021021700" ,
"dataseries" : [
{
"timepoint" : 3,
"cloudcover" : 4,
I/System.out: "seeing" : 6,
"transparency" : 2,
"lifted_index" : 15,
"rh2m" : 5,
"wind10m" : {
"direction" : "NE",
"speed" : 3
},
"temp2m" : 20,
"prec_type" : "none"
},
...
}
where the response is cut short for brevity
Скриншот Android Studio:
Первый снимок экрана KtorTest представлен выше.
KtorTest в общем Основная часть общего кода в мультиплатформенном проекте Android Studio kotlin
Второй снимок экрана относится к классу KtorTest2, который точно такой же, как KtorTest выше, за исключением того, что он находится в папке androidMain общей папки в многоплатформенном проекте.
KtorTest2 в androidMain общего кода в мультиплатформенном проекте Android Studio kotlin
На этих изображениях вы можете видеть, что IDE жалуется на ktor в commonMain, но не на androidMain.