2015-11-07 88 views
48

有很多關於multidex的文章。我經歷了有時錯誤解決包括multiDexEnabled true在我的build.gradle defaultConfig部分。什麼是android multidex?

但是,究竟這個特徵是什麼?哪些是使用它的場景?

回答

83

報價the documentation

Android應用(APK)文件包含的Dalvik執行文件(DEX)文件,其中包含用於運行你的應用程序的編譯代碼形式的可執行字節碼文件。 Dalvik Executable規範將單個DEX文件中可引用的方法總數限制爲65,536,包括您自己代碼中的Android框架方法,庫方法和方法。超越此限制要求您配置應用程序生成過程以生成多個DEX文件(稱爲multidex配置)。

所以,該功能是:它允許您的複雜應用程序進行編譯。使用它的場景是當您的應用程序由於命中64K DEX方法引用限制而無法編譯時。這似乎是一個生成錯誤,如:

Conversion to Dalvik format failed: Unable to execute dex: method ID not in [0, 0xffff]: 65536 
+1

任何想法這將是一個代碼庫有多大(LOC,或粗糙的屏幕)?你會在一個簡單的5-6屏幕應用上達到這個極限嗎?或者它真的比線路更遠(即:10-20個屏幕),你可能會打到它 – Marchy

+13

@Marchy:通常,它來自添加過多的庫。無圖書館項目很難達到這個極限。 – CommonsWare

+0

我有一個小應用程序,它使用了大約5個Google支持庫以及Fabric.io和2或3個其他第三方庫,並且我必須使用multi-dex。 –

10

很簡單,因爲這

單個.DEX文件可以有65536層的方法(參考),所以如果引用的數量超過65536,你去multidex。

更多解釋!

一個android應用程序被編譯成一個.dex文件,然後壓縮成一個.apk文件。
DVM(Dalvik虛擬機)使用.dex文件/文件來執行字節碼。

是什麼原因導致超過65,536個限制?
你寫的方法+ Android框架方法+第三方庫(如Volley,Retrofit,Facebook SDK等)方法。
我已閱讀「的地方」
應用程序兼容性24.2.1包含16.5k方法
谷歌播放服務GCM 9.6.1包含16.7k方法
所以,如果你已經創建了具有應用程序兼容性24.2簡單的Hello World應用程序。 1,你已經1/4路跨越單一DEX方法限制

0

What is MultiDex in Android?

敏捷代表的Dalvik可執行文件,這是谷歌的虛擬機處理器(Dalvik的)用來處理Android應用程序。 Android是以小而簡單的應用程序爲基礎構建的,對一個Dalvik Executable的約束固定在65,536個方法的代碼引用的頂端。由於這個問題以及Dalvik機器處理代碼執行的方式,存在一些編譯和調用問題,直到Monkey Patch或集成爲止。 Android Studio中的MultiDex集成允許Android開發人員使用超過65,536個方法編譯和執行代碼庫!