【问题标题】:NoClassDefFoundError kotlinx serializationNoClassDefFoundError kotlinx 序列化
【发布时间】:2020-12-05 17:56:16
【问题描述】:

我有一个 kotlin 多平台项目,我需要 serialize 一个类。我在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"

这是我要上的课serialize

@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)
    }
}

在另一个班级 (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

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

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

【问题讨论】:

    标签: android kotlin kotlin-multiplatform json-serialization kotlinx.serialization


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      您的课程可能被混淆了。你有两个选择:

      在类上方添加@Keep注解:

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

      或将其添加到模块的 proguard:

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

      【讨论】:

      • 感谢您的回复。我不是最擅长 proguard,所以我想使用 Keep 注释,但由于某种原因,我在 Kotlin Multiplatform 中找不到它。我必须包含一个特定的库吗?
      • 我不这么认为,但你必须import androidx.annotation.Keep
      • 明白。我什至不能import androidx.annotation.Keep。所以相反,我采用了 proguard 的方式,它奏效了。非常感谢您的时间和精力。
      • 我很高兴它对你有用。提示:尝试将您的项目迁移到 AndroidX:developer.android.com/jetpack/androidx/migrate
      • 只是一个简单的问题,因为我的类在commonMain 包中,我不能使用`@Keep`注解,你知道是否有类似的注解?
      猜你喜欢
      • 2021-02-24
      • 2019-12-31
      • 1970-01-01
      • 2019-06-17
      • 2021-05-14
      • 1970-01-01
      • 1970-01-01
      • 2020-02-15
      • 2020-01-23
      相关资源
      最近更新 更多