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

Retrofit2中Observable<List<String>>与Proguard混淆报错咨询

问题解决:Retrofit2+Proguard混淆时Observable泛型错误

核心结论

不需要为String类添加keep规则——String是Java系统核心类,Proguard默认不会对其进行混淆或处理。你遇到的错误本质是Proguard擦除了泛型签名信息,导致Retrofit无法识别Observable的具体参数类型。

具体Proguard配置方案

1. 保留Retrofit相关的类、接口和泛型信息

添加以下规则到你的Proguard配置文件,确保Retrofit能识别接口方法的泛型返回类型:

# 保留Retrofit核心类
-keep class retrofit2.** { *; }
-keep interface retrofit2.CallAdapterFactory
-keep interface retrofit2.ConverterFactory

# 保留你的Retrofit服务接口(替换成实际包路径)
-keep interface com.your.app.package.PlaylistService {
    public <methods>;
}

# 关键:保留泛型签名和注解,避免Proguard擦除
-keepattributes Signature
-keepattributes *Annotation*

2. Gson相关配置(处理List)

因为你用Gson解析List,需要确保泛型类型信息不被擦除,补充以下规则:

# 保留Gson核心类
-keep class com.google.gson.** { *; }
-keep class sun.misc.Unsafe { *; }
-keep class com.google.gson.stream.** { *; }

# 保留参数和方法的注解及泛型信息
-keepattributes RuntimeVisibleAnnotations, RuntimeVisibleParameterAnnotations

错误原因说明

Proguard默认会擦除代码中的泛型签名信息(即Signature属性),而Retrofit需要依靠这个信息确定Observable的具体返回类型(比如Observable<List<String>>)。如果泛型信息被擦除,Retrofit就会抛出你看到的错误,提示返回类型未正确参数化。

内容的提问来源于stack exchange,提问作者Rodrigo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 10:47:11