soap 网络请求 小米 2S 异常

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 准备工具

  • jarjar.jar

  • 修改 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 !

参考:

  • http://www.apkbus.com/forum.php?mod=viewthread&tid=252993&fromuid=22608

  • http://www.apkbus.com/thread-252983-1-1.html

  • http://stackoverflow.com/questions/28339539/app-crash-on-device-htc-m8-with-os-lollipop-for-web-service-call

你可能感兴趣的:(android,异常,小米,saop)