@SerializedName不能与Proguard一起工作



minifyEnabled true上的项目与Proguard的ApiError类不能正确解析,而使用Gson

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的每个字段都被正确解析。我们有和这个相同的proguard规则

如果您希望您的模型仍然被混淆,请使用注释@SerializedName("name_of_json_key")。它将让gson知道字段的真实名称。

在proguard-rules中-keepattributes *Annotation*。支持文件。这将防止您的注释混淆

相关内容

  • 没有找到相关文章

最新更新