# 打包时异常错误 64K问题 , UNEXPECTED TOP-LEVEL EXCEPTION: ....
来源:互联网 发布:透明名片生成器软件 编辑:程序博客网 时间:2024/06/06 03:24
打包时异常错误 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" }
- # 打包时异常错误 64K问题 , UNEXPECTED TOP-LEVEL EXCEPTION: ....
- UNEXPECTED TOP-LEVEL EXCEPTION异常
- UNEXPECTED TOP-LEVEL EXCEPTION
- unexpected-top-level-exception
- UNEXPECTED TOP-LEVEL EXCEPTION 处理
- UNEXPECTED TOP-LEVEL EXCEPTION 处理
- Android Studio报UNEXPECTED TOP-LEVEL EXCEPTION错误解决办法
- UNEXPECTED TOP-LEVEL EXCEPTION: java.lang.IllegalArgumentException: already added问题
- Android Studio Error "UNEXPECTED TOP-LEVEL EXCEPTION"
- Android Studio - UNEXPECTED TOP-LEVEL EXCEPTION:
- android 出现 UNEXPECTED TOP-LEVEL EXCEPTION:
- ant构建异常UNEXPECTED TOP-LEVEL EXCEPTION com.android.dx.cf.iface.ParseException解决
- 反编译UNEXPECTED TOP-LEVEL EXCEPTION出错的解决方法
- react-native 在android运行时报UNEXPECTED TOP-LEVEL EXCEPTION
- UNEXPECTED TOP-LEVEL ERROR
- Error:UNEXPECTED TOP-LEVEL ERROR:
- Error:UNEXPECTED TOP-LEVEL ERROR:
- ant debug 出现 [dx] UNEXPECTED TOP-LEVEL EXCEPTION: [dx] java.nio.BufferOverflowException
- Python的学习笔记(二)(进阶)
- Java线程中 start与run的区别以及源码分析
- AsyncTask--异步任务学习
- 指向学生类的指针
- Lifeary 6.2 portle 之间跳转、传值
- # 打包时异常错误 64K问题 , UNEXPECTED TOP-LEVEL EXCEPTION: ....
- ajax+script的瀑布流写法
- Hibernate调用存储过程
- 猿题库 iOS 客户端架构设计
- 排序算法java 一 --快速排序、直接插入、希尔排序
- 【USACO题库】1.4.3 Arithmetic Progressions等差数列(模拟)
- 简单动态分配内存1
- PHP+JS动态显示当前时间
- hdu4745(区间dp,求最大回文串的长度)