# 打包时异常错误 64K问题 , UNEXPECTED TOP-LEVEL EXCEPTION: ....
2016-05-05 19:15
417 查看
打包时异常错误 64K问题 , UNEXPECTED TOP-LEVEL EXCEPTION: ….
错误提示:UNEXPECTED TOP-LEVEL EXCEPTION: ….
Conversion to Dalvik format failed: Unable to execute dex: method ID not in [0, 0xffff]: 65536
原因: Answer
The Dalvik VM can have a maximum of 65536 methods per dex file, due to a memory allocation issue.
While it is possible to fix this using multiple dex files, Facebook found another fix that they could deploy within their app to get around the problem.
总之就是在产生dex文件的时候 , 方法超过64k的话, 64K 以后的方法无法运行, 于是打包失败
Android 存在 65536 问题:
1)Android 机器在应用的安装过程中,系统会运行 dexopt 工具,将 .dex 文件优化为 .odex 文件,其中 dexopt 工具使用了固定的缓冲区大小来保存方法的元信息,低版本的 Android 机器上该缓冲区非常小,所以一旦方法数过多会直接导致 dexopt 崩溃,应用无法运行。
2)Dalvik 指令集对于一个 .dex 文件只能保存 65536 个方法的索引,所以一个 .dex 文件即使可以拥有很多方法,但是那些多余的方法也都是无法运行的。详细信息可以阅读官方的 dalvik-bytecode 的 invoke-kind {vC, vD, vE, vF, vG}, meth@BBBB 条目。
因此选择 Android 的第三库需要严格注意控制方法的总数量。
官方提供了使用proguard 来缩减代码的方法,
http://developer.android.com/tools/help/proguard.html
另外 就是用 multidex , 可以完美解决, 参考:
http://www.unjeep.com/q/461222804.htm
http://stackoverflow.com/questions/27377080/after-update-of-as-to-1-0-getting-method-id-not-in-0-0xffff-65536-error-i
在出错的module的gradle文件配置文件中修改 :
dependencies { ... compile 'com.android.support:multidex:' ... }
在出错的module的gradle文件配置文件中修改 :
defaultConfig { ... multiDexEnabled true ... }
如果你没有自定义App类的话, 修改Manifest文件, 在Application定义的里面加入
.... android:name="android.support.multidex.MultiDexApplication" ...
如果你有自定义App类的话, 原本继承自android.app.Application, 现在改成
android.support.multidex.MultiDexApplication
如果你自定的App类继承其他的类, 不方便改继承的话, 那么, 复写下面方法
public class MyApplication extends FooApplication { @Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(this); } }
另外, 应用可能会用光内存. 解决这个问题, 在配置文件中加入下面dex 选项到‘android’ 关键字段内
dexOptions { incremental true javaMaxHeapSize "4g" }
相关文章推荐
- OpenCV检测图像SURF特征
- Linux下快速安装和配置jdk8
- iOS应用架构谈 view层的组织和调用方案
- linux下利用valgrind工具进行内存泄露检测和性能分析
- Mac OS X系统安装openssl和Cryptography
- CentOS 7在grub rescue模式中修复系统
- Strom Topology执行分析:worker数,Bolt实例数,executor数,task数
- 高可用Hadoop平台-Flume NG实战图解篇
- linux ftp no route to host 解决方案
- 利用Docker集成多人合作二次开发cacti的开发环境部署文档
- Hadoop全分布式配置
- 聊聊魔性的动画引擎pop
- Hadoop伪分布式配置
- Nginx之让用户通过用户名密码认证访问web站点
- Linux视图模式切换
- LINUX信号
- 改变select里option的文字方向
- 深入理解Apache Flink核心技术
- LinuxShell_variable+if+while
- 关于apache-commons-fileupload 的一个异常