64K了解
Android开发中,当产品迭代到一定版本,业务模块增长到一定规模后,APK不可避免的遇到64K方法数的问题。
64K方法数问题是指Android Dalvik可执行文件.dex中的Java方法数引用超过65536,64K的计算是65536/1024,(65K是65536/1000)
64K方法数问题的直观表现是在构建APP的时候出现编译错误,导致构建失败。
旧版本
Conversion to Dalvik format failed:
Unable to excute dex:method ID not in [0,0xffff]:65536
新版本
trouble writing output:
Too many field references:131000;max is 65536.
You may try using --multi-dex option
64K限制的原因
AndroidAPK本质上是一个压缩文件,它里面包含的classes.dex文件是可执行的Dalvik字节码文件,这个.dex文件中存放的是所有编译后的Java代码。Dalvik可执行文件规范限制了单个.dex文件最多能引用的方法数65536个,这个其中包含了Android Framework,APP引用的第三方函数库以及APP自身的方法。
使用MultiDex解决64K限制的问题
Android5.0之前的版本
Androi5.0(APIlevel 21)之前,系统使用的是Dalvik虚拟机来执行Android应用,默认情况下,Dalvik为每个APK只生成一个classes.dex.
为了避免单个.dex文件方法数超过64K的问题,我们需要拆分单一的classes.dex文件,拆分后可能存在类似于classes.dex、classes1.dex、classes2.dex等多个dex文件,具体有多少个需要看开发者的配置及应用的方法总数,在启动时会先加载classes.dex文件