为什么我会收到 IllegalArgumentException:类 xxxx 未参数化?

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

我将 Android Studio 更新为 Flamingo、Gradle 和库。 之后,如果通过 Android Studio 从模拟器中安装该应用程序,则该应用程序运行良好,但如果使用捆绑包从 Play 商店安装该应用程序,则该应用程序会失败。我认为如果从 .apk 文件安装它就可以工作。

我得到了例外:

java.lang.IllegalArgumentException: class o4.b isn't parameterized
android bundle
2个回答
9
投票

让我在这里写下我的解决方案,以防对其他人有帮助。

几个小时后,发现异常发生在这段代码中:

Type type = new TypeToken<ArrayList<String>>() {}.getType();

我需要使用 Gson.fromJson() 函数的代码。

TypeToken 是使用以下方式导入的:

import com.google.common.reflect.TypeToken;

我不得不改为:

import com.google.gson.reflect.TypeToken;

然后我遇到了另一个错误:

RuntimeException:缺少类型参数

我解决了这个答案:https://stackoverflow.com/a/72520577/1363087

proguard-rules.pro 文件中我添加了以下内容:

-keep class com.google.gson.reflect.TypeToken
-keep class * extends com.google.gson.reflect.TypeToken
-keep public class * implements java.lang.reflect.Type

这一切让我损失了大量的时间。我希望我没有更新 Android Studio 或依赖项。


0
投票

就我而言,我必须保留模型类和 TypeToken,如果我删除任何一个,它就不起作用。

用于保留模型类

# Application classes that will be serialized/deserialized over Gson
-keep class com.example.data.models.** { *; }

用于保留TypeToken

# This is also needed for R8 in compat mode since multiple
# optimizations will remove the generic signature such as class
# merging and argument removal.
# https://r8.googlesource.com/r8/+/refs/heads/main/compatibility-faq.md#troubleshooting-gson-gson

-keep class com.google.gson.reflect.TypeToken { *; }
-keep class * extends com.google.gson.reflect.TypeToken
© www.soinside.com 2019 - 2024. All rights reserved.