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
相关产品推荐
相关产品推荐

