soap 网络请求 小米 2S 异常
1. 问题描述
系统环境:MIUI 7 6.3.17开发版 Android 5.0.2
错误信息
04-06 18:27:49.448: E/AndroidRuntime(27689): java.lang.NoSuchFieldError: No instance field headerOut of type [Lorg/kxml2/kdom/Element; in class Lorg/ksoap2/serialization/SoapSerializationEnvelope;
or its superclasses (declaration of 'org.ksoap2.serialization.SoapSerializationEnvelope' appears in /system/framework/wifi-service.jar)
或者错误信息为:
04-07 11:12:34.094: W/System.err(31008): java.lang.ClassCastException: org.ksoap2.SoapFault cannot be cast to org.ksoap2.serialization.SoapObject
2. 问题分析
定制版的 Android OS 中自带了 saop jar 和 项目中使用的 saop 版本不一致,系统引入的 jar 优先级高,导致 load class 时 引入系统中 jar 的 class 出现了不兼容问题。( 如有雷同 纯属 Y_Y )
3. 解决方案
为了避免 load 系统中其他版本的 saop jar 中的 class 出现兼容问题;只需要修改 saop jar 中的 package name。
3.1 准备工具
修改 package name 规则文件 r.txt,内容如下:
rule origin.package.name.** new.package.name..@1
将 origin.jar、jarjar.jar 和 r.txt 放到同一个目录下,在命令行中进入到该目录下,执行
java -jar jarjar_1.4.jar process ./r.txt ./origin.jar ./out.jar
查看修改后的 package name
java -jar jarjar_1.4.jar strings out.jar
4. 总结
踩坑之旅,一路惊喜,enjoy it,this is life !
参考: