📜  为什么要启用 multidex android - Java (1)

📅  最后修改于: 2023-12-03 15:06:17.626000             🧑  作者: Mango

为什么要启用 multidex

在开发 Android 应用时,开发者会遇到一个 Android 应用的编译时限制:方法数限制。在 Android 系统中,Dalvik 虚拟机使用 16 位,用作方法的索引,因此单个 DEX 文件中支持的方法数被限制在 65536 个方法上限。

随着应用变得越来越复杂,引用的库和框架增多,应用对于达到方法限制的可能性也越来越高,因此会导致构建失败,报错信息类似于:

Error:Execution failed for task ':app:transformDexArchiveWithDexMergerForDebug'.
> java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: Unable to merge dex

为了解决这个问题,Google 在 Android 5.0 中引入了 MultiDex 支持,允许开发者将应用程序拆分为多个 DEX 文件,从而绕过方法数限制。

如何启用 MultiDex
  1. 在 build.gradle 中添加 MultiDex 引用:
dependencies {
  implementation 'androidx.multidex:multidex:2.0.1'
}

在 Application 类中实现 MultiDexApplication,或者如下所示,覆盖 attachBaseContext 方法并调用 MultiDex.install:

public class MyApplication extends Application {
  @Override
  protected void attachBaseContext(Context base) {
    super.attachBaseContext(base);
    MultiDex.install(this);
  }
}
  1. 在 AndroidManifest.xml 的 application 标签中,将 name 属性设置为你刚才实现的 MultiDexApplication 子类的完全限定类名。
<application
    android:name="com.example.MyApplication">
    …
</application>
注意事项
  1. 为了保证预期外的行为不会影响应用程序的性能,MultiDex 库只能在 Android 5.0 及以上版本使用。
  2. MultiDex 引用必须放在其他库引用的上面,即放在 dependencies 中的第一个引用。
  3. 如果不正确地配置 MultiDex,将会导致类文件加载不到,从而导致崩溃。