Android Studio Caused by: java.lang.ClassNotFoundException
2015-12-09 14:18
579 查看
遇到情况:
项目一直运行的很正常,最近在做友盟社会化分享的时候需要导入jar包,导入相关jar编译没问题一运行APP就报ClassNotFoundException,删除了jar包就一切正常了,当时一直以为是jar引用方法不对,但是后来发现我多写了几个函数后同样会报错,问题整整折腾了两天啊,查资料发现原来是因为我的应用中的Dex 文件方法数超过了最大值65536的上限,会引发这种问题。
原因分析
Android系统中,一个App的所有代码都在一个Dex文件里面。Dex是一个类似Jar的存储了多有Java编译字节码的归档文件。因为Android系统使用Dalvik虚拟机,所以需要把使用Java Compiler编译之后的class文件转换成Dalvik能够执行的class文件。这里需要强调的是,Dex和Jar一样是一个归档文件,里面仍然是Java代码对应的字节码文件。当Android系统启动一个应用的时候,有一步是对Dex进行优化,这个过程有一个专门的工具来处理,叫DexOpt。DexOpt的执行过程是在第一次加载Dex文件的时候执行的。这个过程会生成一个ODEX文件,即Optimised Dex。执行ODex的效率会比直接执行Dex文件的效率要高很多。 但是在早期的Android系统中,DexOpt的LinearAlloc存在着限制: Android 2.2和2.3的缓冲区只有5MB,Android 4.x提高到了8MB或16MB。当方法数量过多导致超出缓冲区大小时,会造成dexopt崩溃,导致无法安装.
3.解决办法
1) 在项目目录下build.gradle中android中添加multiDexEnabled true
2) 集成类Application的类中添加代码MultiDex.install(this);
特地在此做个笔记同时也可以帮助遇到同样问题的朋友
项目一直运行的很正常,最近在做友盟社会化分享的时候需要导入jar包,导入相关jar编译没问题一运行APP就报ClassNotFoundException,删除了jar包就一切正常了,当时一直以为是jar引用方法不对,但是后来发现我多写了几个函数后同样会报错,问题整整折腾了两天啊,查资料发现原来是因为我的应用中的Dex 文件方法数超过了最大值65536的上限,会引发这种问题。
原因分析
Android系统中,一个App的所有代码都在一个Dex文件里面。Dex是一个类似Jar的存储了多有Java编译字节码的归档文件。因为Android系统使用Dalvik虚拟机,所以需要把使用Java Compiler编译之后的class文件转换成Dalvik能够执行的class文件。这里需要强调的是,Dex和Jar一样是一个归档文件,里面仍然是Java代码对应的字节码文件。当Android系统启动一个应用的时候,有一步是对Dex进行优化,这个过程有一个专门的工具来处理,叫DexOpt。DexOpt的执行过程是在第一次加载Dex文件的时候执行的。这个过程会生成一个ODEX文件,即Optimised Dex。执行ODex的效率会比直接执行Dex文件的效率要高很多。 但是在早期的Android系统中,DexOpt的LinearAlloc存在着限制: Android 2.2和2.3的缓冲区只有5MB,Android 4.x提高到了8MB或16MB。当方法数量过多导致超出缓冲区大小时,会造成dexopt崩溃,导致无法安装.
3.解决办法
1) 在项目目录下build.gradle中android中添加multiDexEnabled true
2) 集成类Application的类中添加代码MultiDex.install(this);
特地在此做个笔记同时也可以帮助遇到同样问题的朋友
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories