Android 方法超过64K 解决办法

前言:

     一般开发项目的过程中,难免会引用第三方库,当项目越做越大,方法数越来越多的时候,会不可避免的遇到方法数超过64K的错误,这是因为单个dex文件索引的方法是由short类型来保存的。而short的长度范围是(-32768~32767),即总共65536个。那么如何解决这个问题呢。

解决方案有如下几个:

 1.精简方法数量,删除无用的类、方法、第三方库。(治标不治本,业务代码增加,始终会达到临界值)

 2.使用ProGuard去掉一些未使用的代码 (同解决方法1)

 3.插件化方案 

 4.分割Dex

但是方案1和方案2都是有弊端的,这两种方式都是尽量压缩自身方法数来避免达到临界值,但是随着业务代码的增加,这个临界值始终会达到,所以说是一种治标不治本的方式。由于方案3本人没有使用过,这里不多做赘述。这里介绍一下方案4。

Multidex:

  这里Google官方给出了一种解决方式,那就是Multidex。

  首先使用Android SDK Manager升级到最新的Android SDK Build Tools和Android Support Library。然后进行以下两步操作:

android {

     compileSdkVersion 23

     buildToolsVersion"23.0.1"

    defaultConfig{

         ...

        minSdkVersion 19

        targetSdkVersion 23

        ...

        multiDexEnabled  true

    }

dependencies {

   compile 'com.android.support:Multidex:1.0.1'

}

}

2.让应用支持多DEX文件。在官方文档中描述了三种可选方法:

在AndroidManifest.xml的application中声明android.support.MultiDex.MultiDexApplication;

如果你已经有自己的Application类,让其继承MultiDexApplication;

如果你的Application类已经继承自其它类,你不想/能修改它,那么可以重写attachBaseContext()方法:

@Override

protected voidattachBaseContext(Context base) {

           super.attachBaseContext(base);

           MultiDex.install(this);

}

如上,基本上就配置完了。

特别注意:

  在进行如上配置后,可能出现内存溢出的问题。可以尝试在app的gradle下加入如下代码:

android {

    dexOptions{

        javaMaxHeapSize "4g"

    }

}

你可能感兴趣的:(Android 方法超过64K 解决办法)