项目中因为使用到了 Rxjava 等库,导致方法数超过了 64k 限制。于是准备使用 multidex 方案来解决,从此掉入了坑中。

ps:一般的项目如果出现了 64k 限制问题,首先必须考虑的是替换那些只为了方便使用一个小功能而引入的比较大的库,而不是使用下面要介绍的规避 64k 限制的方法。

首先得吐槽一下,开启 multidex 后,打包的速度简直不能再慢,打完一个包,我都可以喝完一杯咖啡了。。热爱生命的我们是最好不会使用它。

1.修改模块级 build.gradle 文件

android {    compileSdkVersion 21    buildToolsVersion "21.1.0"    defaultConfig {        ...        minSdkVersion 14        targetSdkVersion 21        ...        // Enabling multidex support.        multiDexEnabled true    }    ...}dependencies {  compile 'com.android.support:multidex:1.0.0'}

2.引用 MultiDexApplication 类

有两种方法来引用 MultiDexApplication 类,选一种使用即可。

  1. 继承 MultiDexApplication
    publicclassMyApplicationextendsMultiDexApplication{...}
  2. 重写 Application 的 attachBaseContext 方法
    publicclassMyApplicationextendsApplication{@OverrideprotectedvoidattachBaseContext(Contextbase){super.attachBaseContext(base);MultiDex.install(this);}}

记得在清单文件中注册 Application

<application...android:name=".MyApplication">    ...</application>

友情提示: 千万不要忘了引用 MultiDexApplication 类这一步骤,否则,app 在 Android 5.0 以下版本中使用 umeng 统计会闪退,错误信息如下:

java.lang.NoClassDefFoundError:com.umeng.analytics.d

这是 umeng 论坛上给出的解决方法。 http://bbs.umeng.com/thread-16063-1-1.html