在使用 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
的每个字段都被正确解析。
我们有与 this one 相同的混淆器规则
最佳答案
如果您希望您的模型仍然被混淆,请使用注释 @SerializedName("name_of_json_key")。它会让 gson 知道字段的真实名称。
-keepattributes *Annotation*
在您的 proguard-rules.pro 文件中。
这将使您的注释免于混淆
关于android - @SerializedName 不适用于 Proguard,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65846265/