Gson与Ktor生产构建时JSON字段名被转成字母如何解决?
解决Release版本Gson序列化字段名被混淆为单字母的问题
这是因为Release编译开启了代码混淆(R8/ProGuard),数据类的字段名被压缩成短名称,导致Gson序列化时无法使用原本的变量名。以下是两种解决方式:
方法一:给字段添加@SerializedName注解
直接在数据类的字段上通过@SerializedName指定序列化后的字段名,无论是否混淆,Gson都会使用注解中定义的名称:
data class YourDataClass( @SerializedName("expected_field_name") val actualFieldName: String, @SerializedName("another_field") val anotherField: Int )
方法二:配置混淆规则保留数据类字段
如果不想给每个字段加注解,可以在项目的proguard-rules.pro文件中添加规则,保留数据类的字段不被混淆:
# 保留你的数据类所在包下的所有类及其字段 -keep class com.your.app.package.models.** { *; } # 保留Gson相关的必要属性和类,避免Gson自身被混淆 -keepattributes Signature -keepattributes *Annotation* -keep class com.google.gson.** { *; } -keep class sun.misc.Unsafe { *; }
同时确保Module级别的build.gradle中,Release构建类型正确启用混淆并加载规则:
android { buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } }
两种方式各有优势:注解方式更灵活(支持自定义字段名),混淆规则方式更适合批量处理大量数据类。
内容的提问来源于stack exchange,提问作者AntG
相关产品推荐
相关产品推荐

