You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Gson保留泛型签名:Firebase Crashlytics崩溃问题求助

解决TypeToken与jsonschema2pojo生成类的崩溃问题

1. 修正TypeToken的创建方式

必须以匿名内部类形式创建TypeToken,不能直接调用构造方法——TypeToken依赖子类反射来获取泛型类型信息:

// 正确写法
TypeToken<ApiResponse<YourDataClass>> token = new TypeToken<ApiResponse<YourDataClass>>() {};
// 错误写法(触发崩溃)
TypeToken<ApiResponse<YourDataClass>> token = new TypeToken<ApiResponse<YourDataClass>>();

注意末尾的{},这是创建TypeToken匿名子类的关键语法。

2. 配置ProGuard/R8保留泛型元数据

代码压缩工具会移除泛型签名,导致TypeToken无法解析类型。在proguard-rules.pro中添加以下规则:

# 保留泛型签名和注解元数据
-keepattributes Signature, *Annotation*

# 保留jsonschema2pojo生成的ApiResponse类及其泛型信息
-keep class com.your.package.ApiResponse** {
    <fields>;
    <methods>;
}

# 若ApiResponse有内部类,同样保留泛型信息
-keep class com.your.package.ApiResponse$** {
    <fields>;
    <methods>;
}

将com.your.package替换为实际的包路径。

3. 验证jsonschema2pojo生成的ApiResponse类

确认生成的类是正确的泛型类,结构应类似:

public class ApiResponse<T> {
    private T data;
    // 其他字段、getter/setter方法
}

如果生成的类丢失了泛型参数,需调整jsonschema2pojo的生成配置,确保开启泛型类生成。检查JSON Schema定义是否包含泛型相关结构,或在生成工具中指定genericTypes参数。

4. 规避静态/反射场景的错误使用

在静态方法、静态变量中创建TypeToken时,同样要使用匿名内部类形式。避免通过反射动态生成TypeToken,这类场景下泛型元数据大概率已被压缩工具移除。


内容的提问来源于stack exchange,提问作者S. Gissel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 15:15:08