当启用Proguard时,HttpResponse崩溃。

5
java.lang.IncompatibleClassChangeError: Class 
'org.apache.http.message.BufferedHeader' does not implement 
interface 'org.apache.http.NameValuePair' in call to 
'java.lang.String org.apache.http.NameValuePair.getValue()' 
(declaration of 'com.google.firebase.perf.network.NetworkRequestMetricBuilderUtil' 
appears in /data/app/~~mWC7wl-mdiulxrPqJH3MXg==/com.vendsy.tray-5- 
xmP-bIr7MJZJOfz9feYA==/base.apk) at com.google.firebase.perf.network.NetworkRequestMetricBuilderUtil.getApacheHttpResponseContentType(NetworkRequestMetricBuilderUtil.java:62) 
at com.google.firebase.perf.network.FirebasePerfHttpClient.execute(FirebasePerfHttpClient.java:200) 
at com.google.firebase.perf.network.FirebasePerfHttpClient.execute(FirebasePerfHttpClient.java:48)

我尝试添加了proguard规则,但没有起作用

-keep class org.apache.http.HttpResponse { *; }
-dontwarn org.apache.http.**
-keep class com.google.firebase.perf.network.** {*;}
-dontwarn com.google.firebase.perf.network.**

这对你有帮助吗?https://dev59.com/QcDqa4cB1Zd3GeqPnODA - Lawrence Gimenez
这并没有帮助。 - avez raj
你能提供你的完整Proguard文件吗? - Pratik Fagadiya
4个回答

0
问题实际上在于你的 Model.class 如果你正在模型中解析响应,则必须为其指定 proguard 规则。

检查一下是否有这样的行为,如果有,只需为该类或类提供 proguard 规则即可。


所有的模型类都在ProGuard规则文件中被排除,但问题仍然存在。 - avez raj

0

添加以下规则-

-keep class org.apache.http.message.BufferedHeader {
  getValue();
}

或者如下所示-

-keep class com.google.firebase.perf.network.** { *; }
-keep class org.apache.http.** { *; }
-keep interface org.apache.http.** { *; }

0
我建议在proguard-rules.pro文件中将所有DTO类列入白名单。
尝试为您正在映射API响应的每个数据类添加后缀DTO,并将以下行添加到proguard-rules.pro文件。
-keep class *.**DTO
-keepclasseswithmembers class *.**DTO {
 *;
}

0
在你的模型类中添加@Keep。例如:

Kotlin

@Keep
data class user(
    val id: Int,
    val name: String
)

JAVA

@Keep
class user {
    int id;
    String name;

    // Your getter/setters

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接