在使用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
的每个字段都被正确解析。
1条答案
按热度按时间bn31dyow1#
如果你想让你的模型仍然被混淆,使用annotation @SerializedName(“name_of_json_key”),它会让gson知道字段的真实的名称。
www.example.com文件中的
-keepattributes *Annotation*
proguard-rules.pro。这将使您的注解不被混淆