liangjingkanji / Net

Android 基于协程/OkHttp网络请求工具
http://liangjingkanji.github.io/Net/
MIT License
1.8k stars 209 forks source link

当minifyEnabled=true时,项目解析出现异常 #207

Closed yomigatz closed 8 months ago

yomigatz commented 8 months ago

问题描述

当我开启minifyEnabled=true时,项目解析出现问题

期望行为

如何复现

修改build.gradle, ` buildTypes {

    debug {
        minifyEnabled true
        proguardFiles getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro"
    }

    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro"
    }
}`

截图

image

异常堆栈信息或者手机截图/视频(拖拽到输入框即可上传)

版本

yomigatz commented 8 months ago

大概率时混淆的问题导致,库应该在Android上“原样”工作。如果使用的是proguard,则需要将此添加到proguard-rules.pro: -keepattributes *Annotation*, InnerClasses -dontnote kotlinx.serialization.SerializationKt -keep,includedescriptorclasses class com.yourcompany.yourpackage.**$$serializer { *; } # <-- change package name to your app's -keepclassmembers class com.yourcompany.yourpackage.** { # <-- change package name to your app's *** Companion; } -keepclasseswithmembers class com.yourcompany.yourpackage.** { # <-- change package name to your app's kotlinx.serialization.KSerializer serializer(...); }

或者将数据模型添加到忽略文件中: -keep class com.xx.xxx.xx.data.model.** { *; } -keep class com.xx.xxx.xx.data.bean.** { *; }

yomigatz commented 8 months ago

因为我是在lib中配置的项目,所以混淆需要在build.gradle中配置 consumerProguardFiles "consumer-rules.pro" 然后将混淆规则配置到consumer-rules.pro文件中, 至此,我的问题解决了。

liangjingkanji commented 8 months ago

因为序列化框架使用注解的问题

或者建议你还有Jackson取代kotlin-serialization, 他是使用反射反序列化Json