无法将 io.ktor 导入 Android Studio 中 KMM 的通用模块

Posted

技术标签:

【中文标题】无法将 io.ktor 导入 Android Studio 中 KMM 的通用模块【英文标题】:Cannot import io.ktor to common module of KMM in Android Studio 【发布时间】:2021-06-12 06:52:49 【问题描述】:

所以我是 Kotlin 多平台移动和一般移动开发的新手。我正在尝试按照on KMM tutorials 此处的本教程在我的项目中使用 Ktor。

添加依赖后,如build.gradle.kts所示 下面(commonMain、androidMain 和 iosMain 的依赖项):

import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget

plugins 
    kotlin("multiplatform")
    id("com.android.library")


kotlin 
    android()
    ios 
        binaries 
            framework 
                baseName = "shared"
            
        
    

    val ktorVersion = "1.5.2"

    sourceSets 
        val commonMain by getting 
            dependencies 
                implementation("io.ktor:ktor-client-core:$ktorVersion")
            
        
        val commonTest by getting 
            dependencies 
                implementation(kotlin("test-common"))
                implementation(kotlin("test-annotations-common"))
            
        
        val androidMain by getting 
            dependencies 
                implementation ("io.ktor:ktor-client-android:$ktorVersion")
            
        
        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:$ktorVersion")
            
        
        val iosTest by getting
    


android 
    compileSdkVersion(29)
    sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml")
    defaultConfig 
        minSdkVersion(24)
        targetSdkVersion(29)
    


val packForXcode by tasks.creating(Sync::class) 
    group = "build"
    val mode = System.getenv("CONFIGURATION") ?: "DEBUG"
    val sdkName = System.getenv("SDK_NAME") ?: "iphonesimulator"
    val targetName = "ios" + if (sdkName.startsWith("iphoneos")) "Arm64" else "X64"
    val framework = kotlin.targets.getByName<KotlinNativeTarget>(targetName).binaries.getFramework(mode)
    inputs.property("mode", mode)
    dependsOn(framework.linkTask)
    val targetDir = File(buildDir, "xcode-frameworks")
    from( framework.outputDirectory )
    into(targetDir)


tasks.getByName("build").dependsOn(packForXcode)

我尝试import io.ktor.client.* 到公共模块中的一个类,但它无法解决。但是,当我尝试对 Android 模块中的一个类做同样的事情时,它就可以工作了。请看下面的截图:

所以我的问题是:我哪里出错了?或者,它应该是这样的吗?从文档中,我相信我正在尝试做的网络应该在公共模块中完成,而不是在平台特定模块中完成。

请帮忙,我一直在四处寻找问题所在,但没有运气。谢谢!

编辑: 我一直在 Android Studio 中收到此通知

我google了一下,好像是错误通知is incorrect?

【问题讨论】:

我在 Android Studio 4.1.2、4.2 beta 6 和 Arctic Fox 2020.3.1 中遇到了相同的分辨率错误,尽管项目编译没有任何错误。这很可能是 KMM 插件中的一个错误。 @AlekseiTirman 是正确的,即使我已经多次面对这个问题,有时我仍然会面对这个问题。通常我会再次同步gradle,这对我有用,但有几次我需要做Invalidate Cache and restart。请尝试添加您的代码并运行,如果可行,那么除了 KMM 插件本身之外,您没有任何问题。 我尝试过同步 gradle 和无效缓存 + 重启 Android Studio,但都没有奏效。我仍然迷失在这个问题上! 【参考方案1】:

在根 build.gradle.kts 中将 org.jetbrains.kotlin:kotlin-gradle-plugin 从 1.4.10 更新到 1.4.31 为我解决了这个问题。

这就是我的build.gradle.kts 文件的样子:

buildscript 
    repositories 
        gradlePluginPortal()
        jcenter()
        google()
        mavenCentral()
    
    dependencies 
        classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.4.31")
        classpath("com.android.tools.build:gradle:4.2.0-beta06")
        classpath("com.squareup.sqldelight:gradle-plugin:1.4.4")
    


allprojects 
    repositories 
        google()
        jcenter()
        mavenCentral()
    

【讨论】:

为我工作!谢谢 谢谢!!!!它终于奏效了。您是如何发现问题出在 kotlin gradle 插件上的? 不幸的是,这对我不起作用,尽管设置相同。

以上是关于无法将 io.ktor 导入 Android Studio 中 KMM 的通用模块的主要内容,如果未能解决你的问题,请参考以下文章

编译器无法解析 io.ktor.client.features.logging 中的类

如何让 KTOR Logging 在 Android 上编译?

Android 中 Ktor 服务器身份验证的几个问题

如何在 Ktor-client for Android 中清除不记名令牌

Android Studio 未看到 Ktor 序列化程序(未找到“用户”类的序列化程序。)

“未找到转换:类 io.ktor.utils.io.ByteChannelNative”错误使用 Ktor