已发布的 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
(当然是我的包裹)
甚至添加@Keep
到User
课程中,但仍然崩溃
这里有什么问题?
更新
发现问题。我实际上有一个伴生对象,User
并且必须为这个对象添加@Keep 来解决这个问题:
@Keep
@Serializable
data class User(
val id: Long = 0,
val name: String? = null,
val token: String? = null,
...
) {
@Keep
companion object {
const val ...
...
}
}