Android NoClassDefFoundError: org.ksoap2.serialization.SoapObject (Android Studio)

今天调试安卓程序(Android Studio 3.0),ksoap2上传数据报错:

NoClassDefFoundError: org.ksoap2.serialization.SoapObject

奇怪的现象,同样的功能,两个月前还是正常的,今天突然就报错了。jar是正常引用的,也能运行,就是遇到特定的jar里面函数调用的时候报错。

网上查了一圈,大多是关于64K限制、MultiDex相关的,不过试了一些方法,都不起作用。无奈自己找思路:

1. 不同设备的对比:

报错是在工作用的工业安卓板上,但是软件在我的小米平板上却不报错:

工业安卓屏(安卓4.4) 报错

小米平板4(安卓8.0) 正常

既然在小米平板上正常运行,说明代码逻辑本身没问题,是调试配置、或者是安装包的信息在不同版本的安卓系统中有不同的表现。

2. 对比安装包:

用当前安装包和两个月前的前期版本安装包对比,反编译之后

当前版本安装包里面有两个dex

先前版本里面有一个dex

看来确实是MultiDex起作用了。在看看具体的包结构:

当前版本中,ksoap2的内容被分在了第二个dex中

   

先前版本种,ksoap2和其他部分都在一起

    

原因清楚了,因为MultiDex机制的问题,导致在那个4.4的设备上,jar包的引用没能起作用。

参考https://stackoverflow.com/questions/15209831/unable-to-execute-dex-method-id-not-in-0-0xffff-65536

我的解决办法

1. 配置信息:

build.gradle(Module)中的defaultConfig,确保multiDexEnabled为true

defaultConfig {
    //...
    multiDexEnabled true
}

dependencies中:

dependencies {
    //...
    compile 'com.android.support:multidex:1.0.0'
    //...
}

2.代码中

在项目的Application类(我这里名字是TheApplicaiton,原来继承了Application类)中,继承MultiDexApplication类

public class TheApplication extends MultiDexApplication {
    //...
}

重新运行,问题解决。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小鹰信息技术服务部

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值