Multidex(分包)實現簡要分析

weixin_34402408發表於2018-04-27

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配置,要求你做出一些修改您的應用程式開發專案。

  • 修改Gradle的配置,支援multidex
  • 修改你的manifest。讓其支援multidexapplication類
  • 修改Gradle的build如下:
 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、錯誤

  • 一、錯誤型別是: Could not resolve com.android.support:multidex:1.0.2 時,解決方法如下
buildscript {
    repositories {
        jcenter()
          mavenLocal()
          google()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.0'
    }
}

allprojects {
    repositories {
        jcenter()
        google()
    }
}

相關文章