method ID not in [0, 0xffff]: 65536” error解決辦法

今天在開發過程中,遇到一個比較頭痛的問題,所以在這記錄下解決辦法,以後也可以回顧,因爲這次開發中需要集成較多的第三方框架,於是我在集成了數個之後,在一次編譯的過程中,突然編譯異常了,報錯如下

com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536
        at com.android.dx.merge.DexMerger$6.updateIndex(DexMerger.java:484)
        at com.android.dx.merge.DexMerger$IdMerger.mergeSorted(DexMerger.java:261)
        at com.android.dx.merge.DexMerger.mergeMethodIds(DexMerger.java:473)
        at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:161)
        at com.android.dx.merge.DexMerger.merge(DexMerger.java:188)
        at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:504)
        at com.android.dx.command.dexer.Main.runMonoDex(Main.java:334)
        at com.android.dx.command.dexer.Main.run(Main.java:277)
        at com.android.dx.command.dexer.Main.main(Main.java:245)
        at com.android.dx.command.Main.main(Main.java:106)

當時看的我是一陣頭痛,嘗試了諸多解決辦法無果,後面查閱資料才知道了,這個是因爲項目中引用的方法是在是太多了,超過了65536個,於是纔會出現這個錯誤

解決辦法如下:

  • 方法一:在項目的build.gradle文件中加入以下代碼
defaultConfig {
        ...
        minSdkVersion 14
        targetSdkVersion 21
        ...

        // Enabling multidex support.
        multiDexEnabled true
    }
  • 方法二:讓APP覆蓋Application類,繼承於MultiDexApplication這個類,然後重寫他的attachBaseContext這個方法,代碼如下
    override fun attachBaseContext(base: Context) {
        super.attachBaseContext(base)
        MultiDex.install(this)
    }
  • 方法三:在build.gradle中的依賴中添加compile ‘com.android.support:multidex:1.0.0’ 的依賴
    compile 'com.android.support:multidex:1.0.0'

結尾

以上三種方法即可解決這個錯誤,希望能幫助大家也給自己一個總結

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章