fastjson Android Kotlin 新版本1.3.50 ProGuard 错误

ss2ws0br  于 2021-11-27  发布在  Java
关注(0)|答案(3)|浏览(241)

Kotlin 新版本1.3.50 ProGuard 之后 json 转换 object 出错,我把 '1.3.50' 改成 '1.3.21' 才不会出错。


# proguard 内容

-keep class kotlin.reflect.jvm.internal.**{ *; }
-dontwarn com.alibaba.fastjson.**
-keepattributes Signature
-keepattributes *Annotation*
-keep class com.cheekiat.fastjson.model.**{*;}
-keep class com.alibaba.fastjson.**{*;}
isr3a4wc

isr3a4wc2#

添加kotlin-reflect库,并对kotlin.reflect子包添加混淆keep规则;数据bean(即data class)也要keep住,另data class类需要给他一个无参构造器

j8yoct9x

j8yoct9x3#

Android Studio 升级Gradle6.5(Gradle Plugin 4.1)之后,Kotlin中使用fastjason出问题,无法把json串反序列化为Kotlin对象。研究了很久才发现需要这样解决:Kotlin代码中不仅要在data类上添加@keep标注,还需要在其宿主类上添加@keep标注。在Gradle Plugin4.0版没有没有在其宿主类上添加@keep标注也是可以正常工作的,不知道为何升级之后需要这样做,可以解答一下吗? @liminghuanghengtian

目前我让fastjson正常逆序列化Kotlin对象的做法如下:

  • Kotlin代码中需要用fastjson逆序列化的data类,以及其宿主类上都需要添加 @keep 标注
  • data类每个属性都要赋初值,确保Kotllin自动生成空的构建方法
  • 在app的gradle配置中添加kotlin-reflect依赖:
implementation "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
  • proguard的混淆规则需要添加一下内容:

# 按照Gradle Plugin升级说明添的规则

-keep class kotlin.Metadata { *; }
-keepattributes RuntimeVisibleAnnotations

# 因为fastjason需要通过kotlin-reflect完成工作,还需要添加一下规则

-dontwarn kotlin.reflect.jvm.internal.**
-keep class kotlin.reflect.jvm.internal.**{ *; }

相关问题