Multidex(分包)实现简要分析

2018-04-27  本文已影响29人  涛涛123759

1、Multidex的产生

在android5.0之前,每一个android应用中只会含有一个dex文件,但是因为Android系统本身的BUG,使得这个dex的方法数量被限制在65535之内,这就是著名的"64K(641024)"*事件。为了解决这个问题,Google官方推出了这个类似于补丁一样的support-library。关于这个库的详细使用,可以参考官方文档,当然使用起来也会有些坑的,美团填坑记或者这位老兄。使用这个库后,我们的APP不再只会仅有一个dex文件,可能会产生多个dex文件,这样就避免了64K问题。

2、使用方式

用Gradle配置使用Multidex

Android 的 Gradle插件在 Android Build Tool 21.1开始就支持使用multidex了。

设置你的应用程序开发项目中使用multidex配置,要求你做出一些修改您的应用程序开发项目。

 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'
}

对于Multidex的使用,大致有以下几种方式
直接继承MultiDexApplication

public class MyApplication extends MultiDexApplication{
      // ...........
}

直接调用MultiDex.install(Context);

public class MyApplication extends Application{
    public void onCreate(){
        MultiDex.install(this);
    }
}

这两种使用方式,其实本质是一样的,都是通过MultiDex.install(this)来完成dex的加载,看看MultiDexApplication的实现:

public class MultiDexApplication extends Application {
   @Override
   protected void attachBaseContext(Context base) {
      super.attachBaseContext(base);
      MultiDex.install(this);
   }
}

3、错误

buildscript {
    repositories {
        jcenter()
          mavenLocal()
          google()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.0'
    }
}

allprojects {
    repositories {
        jcenter()
        google()
    }
}
上一篇 下一篇

猜你喜欢

热点阅读