原因:
    **
    Dalvik可执行文件.dex中的Java方法数引用超过65536,64k的计算方法是65536除以1024,65K的计算方法是65536除以1000,如果方法数超过64k编译器编译将无法通过.

    解决原理:分包
    **
    但是现在一个大的应用,尤其是集成第三方库的,很容易超过这个数目,所以Android 5.0 之后的版本谷歌试用了名为ART的虚拟机来代替Dalvik虚拟机,ART支持从APK文件中加载多个.dex文件. 在安装期间,他会执行一个预编译操作,对.dex文件编译成一个个单一的.oat文件,在运行应用时去加载.oat文件,而不是.dex文件

    解决方法:

    1: 在Module中的bulid.gradle中添加:
    multiDexEnabled true**

    1. android {
    2. defaultConfig {
    3. minSdkVersion 17
    4. targetSdkVersion 25
    5. versionCode 1
    6. versionName "1.0.0.0"
    7. testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    8. multiDexEnabled true
    9. }

    2:在Module中的bulid.gradle中添加:**compile ‘com.android.support:multidex:1.0.1’

    1. dependencies {
    2. /**第三方依赖库**/
    3. compile 'com.android.support:multidex:1.0.1'
    4. }

    3:在的的Application中,onCreate方法里, super.onCreate()方法之前调用
    MultiDex.install(this);

    1. public class MyApplication extends Application {
    2. @Override
    3. public void onCreate() {
    4. MultiDex.install(this);
    5. super.onCreate();
    6. }
    7. }

    碎碎念:
    不建议使用MultiDex Support Library来将APK中单一的dex拆分成多个,从而规避64k方法数限制引起的变异错误 ,因为会在大多数情况下降低应用的性能

    1. 减少不必要的依赖,对于lib的体积,方法数,性能进行考察,选择合适的库
    2. 使用Proguard移除无用的代码,配置并在Release版本中使能ProGuard,它的压缩功能通过分析字节码,能够检测并移除没有使用到的类,字段,方法和属性,