ClassNotFoundException VS NoClassDefFoundError

ClassNotFoundException: 主要出现在Class.forName、loadClass等方法中,是在类路径中找不到相应的类 NoClassDefFoundError: 当某个类在编译时存在,运行时却找不到

现在说主要的俩个问题 1.在SDKVersion < 21的情况下,开启multidex,必须同时加入multidex的依赖 否则就会报Application ClassNotFoundException。原因就在于当前的运行环境中 并没有支持MultiDex相关的类 我的小米测试机7.0也会有这个问题,难道它用的是davlik虚拟机吗?

2.Multidex开启后,在打包的过程中,会生成多个dex文件 第一个文件是Primary Dex,打包工具会将启动过程中会用到的类 都打包到Primary Dex中,如果有需要用的类,不再primary dex而是在 其他dex中,就会导致NoClassDefFoundError。 打包工具会通过复杂的计算,将用到的类放到primary dex中,但有时候也会漏掉, 比如native方法或者运行时才会调用到的方法。 也有可能是,类被放到了primary dex中,但是被混淆了改名了,会导致这个问题吗?

而且由于5.0以后,运行时由Davlik切换到ART,此时的apk在安装时,会将所有的dex文件 合成一个oat文件,所以不会存在上述问题。 但是为什么我的小米7.0测试机会有这个问题呢?难道虚拟机还是用的davlik吗?