0

已发布的 APK 崩溃并出现下一个错误:

Serializer for class 'User' is not found.
Mark the class as @Serializable or provide the serializer explicitly.

@Keep
@Serializable
data class User(
    val id: Long = 0,
    val name: String? = null,
    val token: String? = null
)

@ExperimentalSerializationApi
object UserSerializer : Serializer<User> {
    override val defaultValue: User
        get() = User()

    override suspend fun readFrom(input: InputStream): User {
        return ProtoBuf.decodeFromByteArray(input.readBytes())
    }

    override suspend fun writeTo(t: User, output: OutputStream) {
        output.write(ProtoBuf.encodeToByteArray(t))
    }
}

我添加了官方的proguard规则

https://github.com/Kotlin/kotlinx.serialization#android

(当然是我的包裹)

甚至添加@KeepUser课程中,但仍然崩溃

这里有什么问题?

更新

发现问题。我实际上有一个伴生对象,User并且必须为这个对象添加@Keep 来解决这个问题:

@Keep
@Serializable
data class User(
    val id: Long = 0,
    val name: String? = null,
    val token: String? = null,
    ...
) {
    @Keep
    companion object {
        const val ...
        ...
    }
}
4

0 回答 0