NoClassDefFoundError kotlinx 序列化

NoClassDefFoundError kotlinx serialization

我有一个 kotlin 多平台项目,我需要 serialize 一个 class。我在我的 commonMainandroidMainiosMain 中分别包含了以下依赖项在我的 multiplatform gradle file 中:

 //commonMain
 implementation "org.jetbrains.kotlinx:kotlinx-serialization-runtime-common:0.20.0"

 //androidMain
 implementation "org.jetbrains.kotlinx:kotlinx-serialization-runtime:0.20.0"

 //iosMain
 implementation "org.jetbrains.kotlinx:kotlinx-serialization-runtime-native:0.20.0"

这是我要的classserialize:

@Serializable
class Test {

    fun toJsonTestClass() = Json.stringify(Test.serializer(), this)
    var value1:Double = 0.toDouble()
       
    companion object {

        fun buildClass(value1 : Double):Test {

            val test = Test()
            test.value1 = value1
   
            return test
        }

         fun fromJsonTestClass(json:String) = Json.parse(Test.serializer(), json)
    }
}

在另一个 class (TrialClass) 中,这就是我测试它的方式:

val test = Test()
val testToJson = test.toJsonTestClass() //<- This is where the error is pointing to.

println(testToJson)

但是当我 运行 它时,我得到以下错误:

Exception in thread "main" java.lang.NoClassDefFoundError: kotlinx/serialization/json/Json
  at Test.toJsonTestClass(Test.kt:28)
  at TrialClass.main(TrialClass.kt:4)
Caused by: java.lang.ClassNotFoundException: kotlinx.serialization.json.Json

在我的 class 中导入时我没有遇到任何问题,但是在 运行ning 时我遇到了上述错误。

任何帮助或建议将不胜感激。

您的 class 可能被混淆了。您有两个选择:

在class上方添加@Keep注释:

@Serializable
@Keep
class Teste {
// ...
}...

或将其添加到模块的混淆器中:

-keep (path_to_the_class).test.** { *; }

就我而言,我所做的一切都是正确的——代码和配置。 gradle clean 没有帮助,我最终得到了来自 IntelliJ IDEA 的魔法 Invalidate Caches / Restart