博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
65536问题理解v4
阅读量:5928 次
发布时间:2019-06-19

本文共 717 字,大约阅读时间需要 2 分钟。

com.android.dex.DexIndexOverflowException 首先出现这个问题场景:当Android应用工程引用方法数>65536时,gradle构建时会报65536问题,肯定是gradle构建任务时做了方法数的检测。大牛们都去翻开构建源码做了验证 method id not in [0,0xffff]。

无论你的应用只运行在Dalvik上还是Art上,都只能打包成dex文件。虽然应用安装之后,dex会被优化成其他格式的文件。

Dalvik Executable 规范将可在单个 DEX 文件内可引用的方法总数限制在 65,536,其中包括 Android 框架方法、库方法以及您自己代码中的方法。在计算机科学领域内,术语[*千(简称 K)*](https://en.wikipedia.org/wiki/Kilo-)表示 1024(或 2^10)。由于 65,536 等于 64 X 1024,因此这一限制也称为“64K 引用限制”。复制代码

而且在dalvik的虚拟机实现里运行时里方法引用索引数是 16 位。这一点官方davlik指令有说明

Dalvik虚拟机和Art虚拟机安装过程中的区别 Apk在Dalvik上安装时,仅加载优化一个dex文件(class.dex)成odex文件 Apk在Art上安装时,会加载多个dex文件,合并优化成oat文件 所以要绕过64k应用限制,首先需要在构建打包过程中将代码分成多个小于64k的文件 在dalvik上需要解决的是如何在运行时加载其他dex文件 而在art上则不需要担心,它会自动处理合并所有dex文件

各路大神的gradle构建源码探究过程移步

参考:

转载地址:http://dtevx.baihongyu.com/

你可能感兴趣的文章
【转】Android:控件Spinner实现下拉列表
查看>>
JavaScript概要
查看>>
Windows8.1硬盘安装Ubuntu14.04双系统参考教程和多硬盘的注意事项[画画]
查看>>
理解SerDes 之一
查看>>
严格模式
查看>>
SharePoint API测试系列——对Recorded Item做OM操作(委托的妙用)
查看>>
每天一个linux命令(1):ls命令
查看>>
android 24 设置与桌面相同的action和category
查看>>
<时间的玫瑰>读书笔记
查看>>
每天一个linux命令(22):find 命令的参数详解
查看>>
Javascript调试利器console的使用
查看>>
IOS开发基础知识--碎片27
查看>>
[CareerCup] 13.6 Virtual Destructor 虚析构函数
查看>>
OpenGL一些函数详解(二)
查看>>
你真的会玩SQL吗?Case的用法(转)
查看>>
MySQL 的乐观并发控制Optimistic concurrency control
查看>>
Java系列: 关于HttpSessionListener的sessionDestroyed什么时候触发
查看>>
森林病虫防治系统 (七.2)
查看>>
Oracle Report : REP-1219
查看>>
android Vibrator 用法
查看>>