所以,我有一个 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>();
}
在您的网络模块中有文件
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
您需要在混淆规则中提及以下代码。
`-keepclasseswithmembers class com.lelestacia.network.model** { *; }`
有什么不明白的地方随时问。