Android爲方法數超過 64K 的應用啓用 MultiDex

爲什麼Android對應用的總方法數(包括應用自身及其引用的庫包含的方法數)會有64K的限制呢?在計算機科學領域內,術語千(簡稱 K)表示 1024(即 2^10)。由於 65536 等於 64 X 1024,因此這一限制稱爲“64K 引用限制”。

其實,這限制與Android手機運行apk的方式有關。Android 5.0(API 21)之前,運行時環境是Dalvik虛擬機。而在Android 5.0及之後,運行時環境改成了ART。那麼我們來看看這兩種情況下,如下配置MultiDex。

1.Android 5.0之前

Android 5.0之前應用 (APK) 文件包含 Dalvik Executable (DEX) 文件形式的可執行字節碼文件,這些文件包含用來運行應用的已編譯代碼。Dalvik Executable 規範將可在單個 DEX 文件內引用的方法總數限制爲 65536,其中包括 Android 框架方法、庫方法以及應用自己的代碼中的方法。默認情況下,Dalvik 將應用限制爲每個 APK 只能使用一個 classes.dex 字節碼文件。所以要突破這個限制,修改模塊級 build.gradle 文件以啓用 MultiDex :

如果應用的 minSdkVersion 設爲 20 或更低的值,則必須使用MultiDex 支持庫。如果 minSdkVersion 設爲 21 或更高的值,則默認情況下會啓用 MultiDex,並且不需要 MultiDex 支持庫。

android {
    defaultConfig {
        ...
        minSdkVersion 15
        targetSdkVersion 28
        multiDexEnabled true
    }
    ...
}

dependencies {
  implementation 'com.android.support:multidex:1.0.3'
}

注意 :
在項目中添加 MultiDex 支持庫時,是用AndroidX,則使用以下依賴:

dependencies {
    def multidex_version = "2.0.1"
    implementation 'androidx.multidex:multidex:$multidex_version'
}

2.Android 5.0及之後

Android 5.0(API 級別 21)及更高版本使用名爲 ART 的運行時,它本身支持從 APK 文件加載多個 DEX 文件。ART 在應用安裝時執行預編譯,掃描 classesN.dex 文件,並將它們編譯成單個 .oat 文件,以供 Android 設備執行。因此,如果您的 minSdkVersion 爲 21 或更高的值,則默認情況下會啓用 MultiDex,並且不需要 MultiDex 支持庫。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章