java.lang.NoClassDefFoundError org.jivesoftware.smackx.packet.DiscoverInfo$Identity

来源:互联网 发布:简易描述linux内核 编辑:程序博客网 时间:2024/05/17 23:54
java.lang.NoClassDefFoundErrororg.jivesoftware.smackx.packet.DiscoverInfo$Identityjava.lang.RuntimeException:Unable to create application com.msqsoft.hodicloud.utils.MyApplication: java.lang.IllegalStateException: Could not init static class blocksandroid.app.ActivityThread.handleBindApplication(ActivityThread.java:4641)......Caused by:java.lang.NoClassDefFoundError:org.jivesoftware.smackx.packet.DiscoverInfo$Identityorg.jivesoftware.smackx.ServiceDiscoveryManager.<clinit>(Unknown Source)java.lang.Class.classForName(Native Method)java.lang.Class.forName(Class.java:251)com.easemob.chat.InitSmackStaticCode.initStaticCode(Unknown Source)com.easemob.chat.EMChat.init(Unknown Source)com.msqsoft.hodicloud.utils.MyApplication.onCreate(MyApplication.java:118)android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1009)android.app.ActivityThread.handleBindApplication(ActivityThread.java:4638)android.app.ActivityThread.access$1800(ActivityThread.java:141)android.app.ActivityThread$H.handleMessage(ActivityThread.java:1301)android.os.Handler.dispatchMessage(Handler.java:102)android.os.Looper.loop(Looper.java:136)android.app.ActivityThread.main(ActivityThread.java:5342)java.lang.reflect.Method.invokeNative(Native Method)java.lang.reflect.Method.invoke(Method.java:515)com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:871)com.android.internal.os.ZygoteInit.main(ZygoteInit.java:687)dalvik.system.NativeStart.main(Native Method)

集成环信客服SDK,一运行就崩了。后来发现有一些手机是可以运行的,逐渐排除发现,可以运行的测试机差不多都是在22以上的api,打包运行测试都正常,后来测试在19的手机上运行程序闪退了
这就很尴尬了,为什么会闪退呢,于是找来个18的手机运行,果然报了错了,而且报的错误是程序的API.怎么会出错呢,22的手机都正常.

分析原因发现:

multDexEnabled true

由于程序用的是MultiDex,这个时候,我想起来了,最近项目新增加了一个比较大的第三方sdk,导致程序又庞大了不少,原来程序就因为API数超过了64K,而分成了两个dex, 自动打包成class.dex和class2.dex.
看来应该是在dex里没找到对应的那个类,好了原因找到了.由于用的MultiDex,于是我首先便检查我的application中,果然发现了出现问题的原因,我的application中没有重写attachBaseContext方法

@Overrideprotected void attachBaseContext(Context base) {        super.attachBaseContext(base);        MultiDex.install(this);    }

重写方法后,打包运行,终于看到引导页了,困扰几天的bug终于解决了.

0 0
原创粉丝点击