启用缩小时数据类 gson 错误

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

所以,我有一个 Kotlin 数据类用作 Retrofit 库的数据传输对象,如下:

data class GenericPaginationResponse<T>(
@SerializedName("data")
val data: List<T>,
@SerializedName("pagination")
val pagination: PaginationResponse
)

但是,当我缩小应用程序时,它在执行时遇到错误并显示以下消息:

无法为类调用无参数构造函数 com.lelestacia.network.model.GenericPaginationResponse。注册一个 这种类型的带有 Gson 的 InstanceCreator 可能会解决这个问题。

我在具有多模块架构的 Android 项目的网络模块中使用此数据类。这是存储库:Github 存储库

这是我的混淆器:

# If you keep the line number information, uncomment this to
# hide the original source file name.
-renamesourcefileattribute SourceFile

 # Keep generic signature of Call, Response (R8 full mode strips signatures from non-kept items).
 -keep,allowobfuscation,allowshrinking interface retrofit2.Call
 -keep,allowobfuscation,allowshrinking class retrofit2.Response

 # With R8 full mode generic signatures are stripped for classes that are not
 # kept. Suspend functions are wrapped in continuations where the type argument
 # is used.
 -keep,allowobfuscation,allowshrinking class kotlin.coroutines.Continuation

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

 -keep class <1> {
   <init>();
 }
android kotlin gson retrofit2 proguard
2个回答
0
投票

在您的网络模块中有文件

consumer-rules.pro

添加以下代码

-keep class com.lelestacia.network.model.*
-keep class com.lelestacia.network.model.anime.*

同样在发布构建类型的网络模块

build.gradle
中,添加以下代码

proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'consumer-rules.pro'

您可以点击以下链接进行

consumer-rules
vs
proguard-rules
https://stackoverflow.com/a/60862591/8007341


0
投票

您需要在混淆规则中提及以下代码。

`-keepclasseswithmembers class com.lelestacia.network.model** { *; }` 

有什么不明白的地方随时问。

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