gson @SerializedName无法与Proguard一起使用

db2dz4w8  于 2022-11-06  发布在  其他
关注(0)|答案(1)|浏览(246)

在使用Proguard的项目的minifyEnabled true上,使用Gson时无法正确解析ApiError类。

data class ApiResponse<D>(
    @SerializedName("status") @Expose val status: String,
    @SerializedName("data") @Expose val data: D?,
    @SerializedName("error") @Expose val error: ApiError?
)

data class ApiError(
    @SerializedName("code") @Expose val code: Int,
    @SerializedName("message") @Expose val msg: String,
    @SerializedName("title") @Expose val title: String?
)

下列程式码会提供ApiResponse对象,其中ApiError未正确剖析。

val collectionType = object : TypeToken<ApiResponse<User>?>() {}.type
                        val gson = GsonBuilder()
                        val errorBody: ApiResponse<T> = gson.create().fromJson(stringObj, collectionType)

ApiError上添加@Keep解决了这个问题,但是@SerializedName不应该做同样的事情吗?有趣的是,ApiResponse的每个字段都被正确解析。

bn31dyow

bn31dyow1#

如果你想让你的模型仍然被混淆,使用annotation @SerializedName(“name_of_json_key”),它会让gson知道字段的真实的名称。
www.example.com文件中的-keepattributes *Annotation*proguard-rules.pro。这将使您的注解不被混淆

相关问题