什么是 Android MultiDex?

有很多关于 MultiDex 的帖子。我经历过,有时候,错误解决了,包括 multiDexEnabled true在我 build.gradle 的 defaultConfig部分。

但是,这个特性到底是什么? 使用它的场景是什么?

60111 次浏览

引用 文件:

Android 应用程序(APK)文件包含可执行字节码文件的形式 Dalvik 可执行(DEX)文件,其中包含用于运行应用程序的编译代码。Dalvik Execable 规范将单个 DEX 文件中可引用的方法总数限制为65,536个,包括 Android 框架方法、库方法和您自己代码中的方法。要超过这个限制,需要将应用程序构建过程配置为生成多个 DEX 文件,称为 multidex 配置。

因此,它的特点是: 它允许您的复杂应用程序进行编译。使用它的场景是当您的应用程序由于达到64K DEX 方法引用限制而无法编译时。这将显示为一个构建错误,如:

Conversion to Dalvik format failed: Unable to execute dex: method ID not in [0, 0xffff]: 65536

就这么简单

一个.dex 文件可以有65,536个方法(引用) ,所以如果引用的数量超过65,536,就使用 multidex。

更多的解释!

一个 android 应用程序被编译成一个. dex 文件,这个文件又被压缩成一个.apk 文件。
DVM (Dalvik Virtual Machine)使用. dex file/files 来执行字节码。

是什么导致引用的数量超过65,536个限制?
由你编写的方法 + Android 框架方法 + 第三方库(如 Volley,Revifit,Facebook SDK 等)方法。
我读过“某处”
App Compat 24.2.1包含16.5 k 个方法
Google Play Services GCM 9.6.1包含16.7 k 个方法
因此,如果您已经创建了一个简单的 Hello world 应用程序,其中包含 AppCompat 24.2.1,那么您已经跨越了单个 dex 方法的限制

根据 Android 开发者官方网站。

If your minSdkVersion is set to 21 or higher, multidex is enabled by default and you do not need the multidex support library.

当您的应用程序和它引用的库超过65,536个方法时,您会遇到一个构建错误,表明您的应用程序已经达到 Android 构建架构的极限

如何在项目中启用 MultiDex

身材好,档次高

 defaultConfig {
applicationId "******"
minSdkVersion 21
targetSdkVersion 30
versionCode 8
versionName "05.15.21.8"
multiDexEnabled true


testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}




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

继承多功能手机应用程序

    public class App extends MultiDexApplication {


private static App instance;


@Override
public void onCreate() {
MultiDex.install(this);
super.onCreate();
instance = this;
}


public static App getInstance ()
{
return instance;
}


@Override
public void onTerminate() {
super.onTerminate();
}


@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
}

在你的清单里

 <application
android:name=".App"
</application>

谢谢你