简体   繁体   中英

Cannot serialize Kotlin type with Moshi AND R8

i have this strange problem. When using minify/obfuscation with R8 i have the following error

java.lang.IllegalArgumentException: Cannot serialize Kotlin type <omitted>auth.model.ErrorResponse. Reflective serialization of Kotlin classes without using kotlin-reflect has undefined and unexpected behavior. Please use KotlinJsonAdapter from the moshi-kotlin artifact or use code gen from the moshi-kotlin-codegen artifact.

With no minify/obfuscation everything it's ok. I'm using

     val moshi = Moshi.Builder()
                .add(BigDecimalAdapter)
                .add(KotlinJsonAdapterFactory())
                .build()

as readme from moshi, stated. Also in gradle i'm using

 implementation("com.squareup.moshi:moshi-kotlin:1.9.3")

and added rules

-keep class com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory
-keep class <omitted>auth.model.ErrorResponse

but still have the same exception. what am i missing ?

Thanks

updated

here's my BigDecimalAdapter

object BigDecimalAdapter {
    @FromJson
    fun fromJson(string: String) = BigDecimal(string)

    @ToJson
    fun toJson(value: BigDecimal) = value.toString()
}

try adding to your proguard:

-keepclassmembers class * {
    @com.squareup.moshi.FromJson <methods>;
    @com.squareup.moshi.ToJson <methods>;
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM