启用ProGuard时HttpResponse发生崩溃问题求助
启用ProGuard时HttpResponse崩溃问题解决
问题
启用ProGuard后,HttpResponse出现崩溃,抛出java.lang.IncompatibleClassChangeError错误,核心原因是Firebase Performance监控工具类尝试将org.apache.http.message.BufferedHeader当作org.apache.http.NameValuePair接口调用getValue()方法,但该类并未实现该接口。
错误信息
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.**
解决方案
添加以下ProGuard规则,确保Apache Http核心类、接口及Firebase Perf相关类不被混淆或优化:
# 保留所有Apache Http类和接口,避免结构被修改 -keep class org.apache.http.** { *; } -keep interface org.apache.http.** { *; } -dontwarn org.apache.http.** # 保留Firebase Perf网络监控类 -keep class com.google.firebase.perf.network.** { *; } -dontwarn com.google.firebase.perf.network.** # 明确保留引发错误的类和接口,防止ProGuard误优化 -keep class org.apache.http.message.BufferedHeader { *; } -keep interface org.apache.http.NameValuePair { *; }
说明
错误根源是ProGuard在混淆过程中,可能删除或修改了NameValuePair接口与BufferedHeader类的关联结构,导致Firebase Perf代码调用时出现类型不兼容。之前的规则仅覆盖了HttpResponse和Firebase类,未包含关键的NameValuePair接口和BufferedHeader类,补充后即可解决类型转换错误。
内容的提问来源于stack exchange,提问作者avez raj
相关产品推荐
相关产品推荐

