当minifyEnabled为true时,无法使用GSON解析JSON对象

5

当我使用

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运行该应用程序,一切都正常。

什么是错误? - tyczj
请分享崩溃日志。 - Shalu T D
@tyczj java.lang.NullPointerException: throw with null exception,由于这是在.apk安装后发生的错误,因此我没有任何错误跟踪。如果我从Studio运行应用程序,则一切正常。 - MaxB
2个回答

7

我相信您需要编辑您的proguard-rules.pro文件,并添加这行来包含这些数据类。 您可以在此处阅读更多信息。

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

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接