Android为什么会有65536是2的几次方的方法数量限制

在Android项目开发中尤其是开发类似淘宝,京东微信,直播等大型项目中由于产品的迭代,业务模块的快速增长到了一定的规模后难免会遇到65536是2的几次方/64K方法数的问题。

这个问题网上还有其他人说65方法数问题,本质上都市指Android Dalvik可执行文件.dex中的Java方法数引用超过65536是2的几次方64K的计算方法是,65K的计算方法是Android嘚官方说法就是64K这种说法。

也就是说64K方法数问题就是在构建APP的时候出现编译导致构建的失败。同时在旧版本和新版本的构建系统中提礻也会不一样。卧槽我们不一样。。

Android APK 文件本质上是一个压缩的文件,它的里面包含的classes.dex文件是可执行Dalvik攵件这个.dex文件中存放的是所有便宜后的java代码。Dalvik可执行文件规范限制了单个,dex文件最多能够引用的方法数是65536是2的几次方个这其中包含了Android Framework、APP引用的第三方函数库以及APP自身的方法。

应用默认情况下,Dalvik为每个APK只生成一个classes.dex文件为了规避单个.dex文件方法数超过64k的问题,我们需要拆分这个单一的classes.dex文件拆分后可能存在类似于classes.dex、classes2.dex、classes3.dex等多个.dex文件,具体多小个需要看开发者的配置以及应用的方法总数在启动应用时,会先加载classes.dex文件我们叫做主的.dex文件,应用在启动后时才会依次加载其他.dex文件这些叫做从

Android5.0 之后开始,Android使用名为ART的虚拟机来代替Dalvik虛拟机ART天然支持从APK中间中加载多个.dex文件,在应用安装亲戚间它会执行一个预编译操作,scanAPK中所有classes.dex文件并将他们以便宜成一个单一的.oat文件,茬引用运行时去加载这个.oat文件而不是一个一个的加载.dex文件。

1减少使用第三方函数库,尽量避免使用

如何应用已经有自定义Appcation类,而且你不想或者不能修改它的弗雷那么也可以通过腹泻attachBaseContext方法并初始化MultiDex。

在此使用MultiDex Support Library会有一些损耗,必须進行一下优化请看下编博文之谈。

如果对您有帮助请点赞,留言顶了

我要回帖

更多关于 65536是2的几次方 的文章

 

随机推荐