获取 MultiDex 错误,即使在设置 Min SDK 21 之后

Getting MultiDex Error, even after setting Min SDK 21

我正在从事的项目有 180k 方法。我读过博客和文章,其中写道,如果将 Min SDK 设置为 21,则不需要 MultiDex。但是如果我从这里删除 MultiDex 它会给我 65k MultiDex 错误消息。以下是我的 gradle 文件。我不知道是我没能理解这个概念还是别的什么。请指导我。

compileSdkVersion 23
buildToolsVersion "23.0.3"
defaultConfig {

    applicationId 'com.myapp.app'
    minSdkVersion 21
    targetSdkVersion 23
    versionCode 59
    versionName "1.0.1"
    multiDexEnabled true
    ndk {
        abiFilters "armeabi", "armeabi-v7a", "x86"
    }
}
dexOptions {
    javaMaxHeapSize "4g" //specify the heap size for the dex process
}
lintOptions {
    abortOnError false
}

buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}

productFlavors {
} 

if you set your Min SDK to 21, then you don't need MultiDex

根据 MultiDex guide 中的 "Multidex support for Android 5.0 and higher" 说明,即使你 minSdk 21 那么你仍然需要使用 multiDexEnabled true 进行编译。您不需要做的是通过以下方式包含 MultiDex 支持库:

compile 'com.android.support:multidex:1.0.0'

或在 Application class 中调用 MultiDex.install(Context)

64K 方法问题是 DEX 文件格式的限制,而不是 Android 平台本身的限制。这两个版本之间的区别在于 Android 5.0+ 知道如何自动将多个 DEX 文件加载到单个 OAT 文件中并从中加载 classes 而 Android 5.0 之前的版本需要支持库以便从辅助 DEX 文件(例如 classes2.dex、classes3.dex 等)加载 classes。