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

标签 android performance gradle proguard android-multidex

我正在处理的项目有大约 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 中的“对 Android 5.0 及更高版本的 Multidex 支持”说明,即使你 minSdk 21 那么你仍然需要使用 multiDexEnabled true 进行编译。您不需要做的是通过以下方式包含 MultiDex 支持库:

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

或在您的 Application 类中调用 MultiDex.install(Context)

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

关于android - 获取 MultiDex 错误,即使在设置 Min SDK 21 之后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40309249/

相关文章:

java - travis-ci 中的 gradle 检查失败

Android Gradle 库构建 : Include & exclude files from the jar inside the generated aar

java - 如何为 Java 代码强制执行标准样式?

android - 将 "useLibrary"添加到 android cordova 插件中的 build.gradle

Android 问题 - 后台服务不会停止

log_bin打开时mysql 5.6.21更新语句非常慢

c++ - 在 C++ 中哪个更快 : i<=N or i<N+1

android - 如何在 Android Studio 中使用 Smack 与 Openfire XMPP 服务器联网

java - Spika-Android : "Can' t connect to server"

javascript - 对于 Javascript 游戏引擎,重新使用全局变量比制作本地变量更有效还是更不有效?