1. 程式人生 > >Android編譯出現com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536錯誤解決辦法

Android編譯出現com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536錯誤解決辦法

踩過的坑, 以下操作,必須在app module中進行。

==========================================

**

Android編譯出現com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536錯誤解決辦法

**

今天在編譯專案時出現了這個錯誤,在我用真機進行執行的時候沒有這個錯誤,程式也可以跑起來,當我用模擬器,運存1G的執行時,突然就出現了這個錯誤,搞得我一臉懵逼。然後也查閱了相關部落格和網站。終於將這個問題解決了,感謝簡書上作者:Easyrealjs給予的幫助。

其實這個問題就是當你在工程中引入了多個第三方jar包,導致呼叫的方法數超過了android設定的65536個(DEX 64K problem),進而導致dex無法生成,也就無法生成APK檔案,也就無法運行了。 
解決辦法如下:

一、在你app下的build.gradle新增如下:

android {
    defaultConfig {
        ...
        multiDexEnabled true
        ...
    }
}

二、在你app下的build.gradle中的dependencies節點下新增如下:

dependencies {
    ...
    compile 'com.android.support:multidex:1.0.1'
    ...
}

之後SYNC。

三、這一步驟要分幾種情況來講:

1、如果你的專案沒有使用自己定義的Application時,你需要在AndroidManifest.xml中的<Application中新增:
  •  
    <application
        android:name="android.support.multidex.MultiDexApplication"
    </application>
  • 1
  • 2
  • 3
2、如果你已經建立了,並且已經在使用了,如下:
    將原來的:
  •  
    public class TheApplication extends Application {
    }
  •  
    換成:
  •  
    public class TheApplication extends MultiDexApplication {
    }
  •  
3、如果你的Application繼承了其他類,比如有可能是你的Lib中的Application類,而且你不想去修改他的繼承,那麼,只需要修改他的attachBaseContext()方法即可.
  •  
    public class MyApplication extends FooApplication{//FooApplication指其他類

        @Override
        protected void attachBaseContext(Contextbase){
            super.attachBaseContext(base);
            MultiDex.install(this);
        }
    }
  •  

原文出自: http://www.jianshu.com/p/396fbb6fe806 
如果有需要,你可以看下這篇相對較深的文章:http://blog.csdn.net/t12x3456/article/details/40837287