android - @SerializedName 不适用于 Proguard

标签 android gson proguard

在使用 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/

相关文章:

android - 在 webview 中显示 PDF

android - 如何修复使用 Jackson/Gson 库解析的不准确的日期时间(分钟)?

java - gson排除策略仅适用于目标对象的字段

Android 成功的 JSON 响应但 response.isSuccess() 不正确

android - 添加 Glide v4 后的 Proguard 错误

java - 如果代码将被混淆,我是否可以始终使用反射 API?

android map v2 不会在 Debug模式下显示

android - 检测我的应用程序自己的android :versionCode at run time

java - ProGuard:ClassCastException

android - 如何在 facebook SDK 3.0 Android 中获取用户的 facebook 个人资料图片