设置 minifyEnabled 为 true 时无法使用 GSON 解析 json 对象

问题描述 投票:0回答:2

当我使用时

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 时发生。如果我从 Android Studio 运行该应用程序,一切都很好。

android kotlin gson proguard
2个回答
6
投票

我相信您需要编辑您的

proguard-rules.pro
文件以在这一行中包含这些数据类。您可以在此处阅读更多相关信息。

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

0
投票

对于没有遇到同样问题的任何人。使用 @SerializedName 属性,请改用此属性

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

而不是上面接受的答案检查链接https://r8.googlesource.com/r8/+/refs/heads/master/compatibility-faq.md

© www.soinside.com 2019 - 2024. All rights reserved.