64K了解
Android開發(fā)中求摇,當產(chǎn)品迭代到一定版本,業(yè)務(wù)模塊增長到一定規(guī)模后栖袋,APK不可避免的遇到64K方法數(shù)的問題茂附。
64K方法數(shù)問題是指Android Dalvik可執(zhí)行文件.dex中的Java方法數(shù)引用超過65536,64K的計算是65536/1024正蛙,(65K是65536/1000)
64K方法數(shù)問題的直觀表現(xiàn)是在構(gòu)建APP的時候出現(xiàn)編譯錯誤,導(dǎo)致構(gòu)建失敗营曼。
舊版本
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本質(zhì)上是一個壓縮文件乒验,它里面包含的classes.dex文件是可執(zhí)行的Dalvik字節(jié)碼文件,這個.dex文件中存放的是所有編譯后的Java代碼蒂阱。Dalvik可執(zhí)行文件規(guī)范限制了單個.dex文件最多能引用的方法數(shù)65536個锻全,這個其中包含了Android Framework,APP引用的第三方函數(shù)庫以及APP自身的方法。
使用MultiDex解決64K限制的問題
Android5.0之前的版本
Androi5.0(APIlevel 21)之前录煤,系統(tǒng)使用的是Dalvik虛擬機來執(zhí)行Android應(yīng)用鳄厌,默認情況下,Dalvik為每個APK只生成一個classes.dex.
為了避免單個.dex文件方法數(shù)超過64K的問題妈踊,我們需要拆分單一的classes.dex文件了嚎,拆分后可能存在類似于classes.dex、classes1.dex廊营、classes2.dex等多個dex文件新思,具體有多少個需要看開發(fā)者的配置及應(yīng)用的方法總數(shù),在啟動時會先加載classes.dex文件