Android開發 Error:The number of method references in a .dex file cannot exceed 64K.

來源:互聯網
上載者:User

標籤:enable   efault   解決   類型   class   最佳化   引用   err   jar   

在Android系統中,一個App的所有代碼都在一個Dex檔案裡面。Dex是一個類似Jar的儲存了多有Java編譯位元組碼的歸檔檔案。因為Android系統使用Dalvik虛擬機器,所以需要把使用Java Compiler編譯之後的class檔案轉換成Dalvik能夠執行的class檔案。這裡需要強調的是,Dex和Jar一樣是一個歸檔檔案,裡面仍然是Java代碼對應的位元組碼檔案。當Android系統啟動一個應用的時候,有一步是對Dex進行最佳化,這個過程有一個專門的工具來處理,叫DexOpt。DexOpt的執行過程是在第一次載入Dex檔案的時候執行的。這個過程會產生一個ODEX檔案,即Optimised Dex。執行ODex的效率會比直接執行Dex檔案的效率要高很多。 但是在早期的Android系統中,DexOpt的LinearAlloc存在著限制: Android 2.2和2.3的緩衝區只有5MB,Android 4.x提高到了8MB或16MB。當方法數量過多導致超出緩衝區大小時,會造成dexopt崩潰,導致無法安裝.

另外由於DEX檔案格式限制,一個DEX檔案中method個數採用使用原生類型short來索引檔案中的方法,也就是4個位元組共計最多表達65536個method,field/class的個數也均有此限制。對於DEX檔案,則是將工程所需全部class檔案合并且壓縮到一個DEX檔案期間,也就是Android打包的DEX過程中, 單個DEX檔案可被引用的方法總數被限制為65536(自己開發以及所引用的Android Framework和第三方類庫的代碼).

 

解決辦法 可以引入: compile ‘com.android.support:multidex:1.+‘ 修改Application extends MultiDexApplication; 最後在build.gradle defaultConfig中加入:

defaultConfig {multiDexEnabled true}

Android開發 Error:The number of method references in a .dex file cannot exceed 64K.

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.