綜合技術(shù)
- android 65535方法數(shù)限制原因
Android app中所有代碼都放在dex文件中切黔,dex中存放了全部java編譯后的字節(jié)碼文件
當(dāng)Android系統(tǒng)啟動一個應(yīng)用的時候茂装,有一步對dex進行優(yōu)化擎勘,通過DexOpt處理工具專門來對dex進行優(yōu)化拆宛,DexOpt執(zhí)行是在第一次加載Dex的時候執(zhí)行鹿寨,這個過程會生產(chǎn)一個ODEX文件蕊肥,即Optimised吼渡。
DexOpt會把每個方法存儲起來(dexopt采用一個固定大小的緩沖區(qū)來存儲應(yīng)用中所有方法信息,這個緩沖區(qū)就是LinearAlloc,緩沖區(qū)在新版本中的大小是8M或16M,在2.2恩溅,2.3中只有5M,如果存儲的方法信息大于5M,dexopt就會報錯)隔箍,存在一個鏈表結(jié)構(gòu)里,但這個鏈表長度是用short類型來保存的脚乡。
short類型二進制位16位蜒滩,范圍:-215~215-1 也就是-32768~32767 一共65535個數(shù)
官方的解決方案,導(dǎo)入multidex包:http://blog.csdn.net/czhpxl007/article/details/50419974
在Android5.0之前奶稠,需要使用官方提供的android-support-multidex.jar包俯艰,5.0之后,Android應(yīng)用默認支持multidex.
multidex的優(yōu)缺點
- 會降低應(yīng)用的啟動速度
- 由于MultiDex的bug锌订,極少數(shù)4.0以上的手機運行multidex的程序會報錯竹握。