【发布时间】:2021-04-26 23:39:19
【问题描述】:
在使用 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有同样的proguard规则
【问题讨论】:
-
你应该在你的 proguard 规则中保留数据类
-
@Rolud 为什么有什么具体原因?