当设置minimyEnabled为true时,无法使用GSON解析json对象



当我使用时

buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}

一切都很完美。

但如果改为

buildTypes {
release {
minifyEnabled true
useProguard true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}

我得到一个解析错误。

我要解析的类:

data class SearchItem(
@SerializedName("position") val position: Long,
@SerializedName("user") val user: String?
) {
fun getId(): Long {
return 0L
}
}
data class SearchResponse(
@SerializedName("list") val list: List<SearchItem>,
@SerializedName("has_more") val has_more: Boolean,
@SerializedName("rank_token") val rank_token: String,
@SerializedName("status") val status: String
)

这里我使用gson:

val searchResponse = Gson().fromJson(jsonObject.toString(), SearchResponse::class.java)

proguard-rules.pro中,我有一个非注释行-keepattributes *Annotation*

如果有任何帮助,我将不胜感激!

编辑错误日志:

E/AndroidRuntime: FATAL EXCEPTION: k.c0 Dispatcher
Process: PID: 31392
java.lang.NullPointerException: throw with null exception
at h.a.a.j.a.a.a(:2)
at k.l0.g.e$a.run(:6)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
at java.lang.Thread.run(Thread.java:764)

只有在安装.apk时才会发生这种情况。如果我从安卓工作室运行应用程序,一切都很好。

我认为您需要编辑proguard-rules.pro文件,以便在此行中包含这些数据类。你可以在这里阅读更多关于它的信息。

-keepclassmembers,allowobfuscation class * {
@com.google.gson.annotations.SerializedName <fields>;
}

对于任何一个有相同问题的人,如果没有。使用@SerializedName属性时,请使用此

-keepclassmembers class MyDataClass {
!transient <fields>;
} 

上面的检查链接没有被接受的答案https://r8.googlesource.com/r8/+/refs/heads/master兼容性-faq.md

相关内容

  • 没有找到相关文章

最新更新