com.android.dex.DexIndexOverflowException
首先出現(xiàn)這個(gè)問題場景:當(dāng)Android應(yīng)用工程引用方法數(shù)>65536時(shí)唯笙,gradle構(gòu)建時(shí)會(huì)報(bào)65536問題螟蒸,肯定是gradle構(gòu)建任務(wù)時(shí)做了方法數(shù)的檢測。大牛們都去翻開構(gòu)建源碼做了驗(yàn)證 method id not in [0,0xffff]崩掘。
無論你的應(yīng)用只運(yùn)行在Dalvik上還是Art上七嫌,都只能打包成dex文件。雖然應(yīng)用安裝之后苞慢,dex會(huì)被優(yōu)化成其他格式的文件诵原。
Dalvik Executable 規(guī)范將可在單個(gè) DEX 文件內(nèi)可引用的方法總數(shù)限制在 65,536,其中包括 Android 框架方法挽放、庫方法以及您自己代碼中的方法绍赛。在計(jì)算機(jī)科學(xué)領(lǐng)域內(nèi),術(shù)語[*千(簡稱 K)*](https://en.wikipedia.org/wiki/Kilo-)表示 1024(或 2^10)辑畦。由于 65,536 等于 64 X 1024吗蚌,因此這一限制也稱為“64K 引用限制”。
而且在dalvik的虛擬機(jī)實(shí)現(xiàn)里運(yùn)行時(shí)里方法引用索引數(shù)是 16 位纯出。這一點(diǎn)官方davlik指令有說明
Dalvik虛擬機(jī)和Art虛擬機(jī)安裝過程中的區(qū)別
Apk在Dalvik上安裝時(shí)蚯妇,僅加載優(yōu)化一個(gè)dex文件(class.dex)成odex文件
Apk在Art上安裝時(shí),會(huì)加載多個(gè)dex文件暂筝,合并優(yōu)化成oat文件
所以要繞過64k應(yīng)用限制箩言,首先需要在構(gòu)建打包過程中將代碼分成多個(gè)小于64k的文件
在dalvik上需要解決的是如何在運(yùn)行時(shí)加載其他dex文件
而在art上則不需要擔(dān)心,它會(huì)自動(dòng)處理合并所有dex文件
各路大神的gradle構(gòu)建源碼探究過程移步