KMM 项目:预期的类在 JVM 模块中没有实际声明

Emb*_*cro 9 intellij-idea android-studio gradle-kotlin-dsl kotlin-multiplatform kmm

expect我有一个运行完美的 KMM 项目,除了 Android Studio在我的项目中的每个函数/值上给出错误,抱怨actualJVM 不存在该版本。

在此输入图像描述

旁边的黄色菱形中的 A 显示了 iOS 和 Android 的实际版本,并且该项目构建/运行得很好。

在此输入图像描述

我已经仔细检查了包名称,expect无论包如何,每个包都会发生这种情况。

我检查了我的 gradle 构建文件,将它们与新的 KMM 示例项目进行比较时找不到任何奇怪的东西。

plugins {
    kotlin("multiplatform")
    kotlin("native.cocoapods")
    id("com.android.library")
    id("com.rickclephas.kmp.nativecoroutines") version "0.12.2-new-mm"
}

version = "1.0"

kotlin {
    android()
    iosX64()
    iosArm64()
    //iosSimulatorArm64() sure all ios dependencies support this target

    cocoapods {
        summary = "Some description for the Shared Module"
        homepage = "Link to the Shared Module homepage"
        ios.deploymentTarget = "15.0"
        podfile = project.file("../iosApp/Podfile")
        framework {
            baseName = "shared"
        }
    }

    sourceSets {
        val ktorVersion = "2.0.2"

        val commonMain by getting {
            dependencies {
                implementation("com.litclimbing:firebase-auth:+")
                implementation("com.litclimbing:firebase-firestore:+")
                implementation("com.litclimbing:buffer:+")

                implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.1")

                implementation("org.jetbrains.kotlinx:kotlinx-datetime:0.3.2")

                implementation("io.ktor:ktor-client-core:$ktorVersion")
            }
        }
        val commonTest by getting {
            dependencies {
                implementation(kotlin("test"))
            }
        }
        val androidMain by getting {
            dependencies {
                implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.4.1")
                implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.1")
                implementation("io.ktor:ktor-client-okhttp:$ktorVersion")
            }
        }
        val androidTest by getting

        val iosX64Main by getting
        val iosArm64Main by getting
        //val iosSimulatorArm64Main by getting
        val iosMain by creating {
            dependsOn(commonMain)
            iosX64Main.dependsOn(this)
            iosArm64Main.dependsOn(this)
            //iosSimulatorArm64Main.dependsOn(this)
            dependencies {
                implementation("io.ktor:ktor-client-darwin:$ktorVersion")
            }
        }
        val iosX64Test by getting
        val iosArm64Test by getting
        //val iosSimulatorArm64Test by getting
        val iosTest by creating {
            dependsOn(commonTest)
            iosX64Test.dependsOn(this)
            iosArm64Test.dependsOn(this)
            //iosSimulatorArm64Test.dependsOn(this)
        }
    }

    sourceSets.all {
        languageSettings.optIn("kotlin.RequiresOptIn")
        languageSettings.optIn("kotlin.ExperimentalUnsignedTypes")
    }
}

android {
    compileSdk = 32
    sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml")
    defaultConfig {
        minSdk = 29
        targetSdk = 32
    }
}
Run Code Online (Sandbox Code Playgroud)
buildscript {
    repositories {
        gradlePluginPortal()
        google()
        mavenCentral()
    }
    dependencies {
        classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.21")
        classpath("com.android.tools.build:gradle:7.2.1")
        classpath("com.google.gms:google-services:4.3.10")
        classpath("com.google.firebase:firebase-crashlytics-gradle:2.9.0")
    }
}

allprojects {
    repositories {
        google()
        mavenLocal()
        mavenCentral()
        maven {
            setUrl("https://jitpack.io")
        }
        maven {
            setUrl("https://maven.pkg.jetbrains.space/public/p/kotlinx-coroutines/maven")
        }
    }
}

tasks.register("clean", Delete::class) {
    delete(rootProject.buildDir)
}
Run Code Online (Sandbox Code Playgroud)

我什至尝试将 gradle 文件复制到一个新的 KMM 项目中,看看它是否会破坏它,但它没有破坏它,所以我不知道该去哪里查看。

Emb*_*cro 5

这并不是我正在寻找的解决方案,但它似乎是 Android Studio/IntelliJ 中的一个错误,而不是 gradle 设置。

要修复它,请执行以下操作。

  1. 关闭 Android Studio
  2. 在文件浏览器中打开项目文件夹
  3. 将 .idea 文件夹重命名为 .ideaBackup
  4. 重新打开项目
  5. 假设现在一切正常,删除 .ideaBackup
  6. 享受没有随机错误的乐趣