之前测试提了一个bug,5.0以下安装运行会报错误,5.0以上完全没有问题,一脸懵逼,经过网上查找资料,总结如下:
错误例子:java.lang.NoClassDefFoundError: qalsdk.r(这边引用了,腾讯IM的库)
原因:Android应用方法总数限制造成的
当Android系统安装一个应用的时候,需要对Dex格式文件加载处理(APK里面的classes.dex),在早期的Android系统中,处理的时候会把每一个类的方法id检索起来,存在一个链表结构里面。但是这个链表的长度是用一个short类型来保存的,导致了方法id的数目不能够超过65536个(包括Android框架、类库和你自己开发的代码)。当一个项目足够大,引用三方库太多的时候,显然这个方法数的上限是不够的。为了解决方法数超限的问题,需要将该dex文件拆成两个或多个,为此谷歌官方推出了multidex兼容包,配合AndroidStudio实现了一个APK包含多个dex的功能,而Android 5.0及以上运行时它原生支持从APK文件加载多个DEX文件。
解决方法如下:
第一步:在app gradle 配置文件中添加 multiDexEnabled true
第2步:
方式一: 在manifest文件中,添加MultidexApplication Class的引用,如下图所示
方式二: 如果重写了 Application
方法①,对Application的继承方式做一个修改
方法②,重写父类方法
番外:之前只在app gradle 配置文件中添加multiDexEnabled true, 以为不是这个问题,找了半天,原来还要进行下一步操作
android MultiDex 原理等更多 可以参考这篇文章:http://blog.csdn.net/djy1992/article/details/51162013