全部产品

mPaaS Inside 工程使用 MultiDex 的注意事项

更新时间:2020-05-15 00:45:07

关于本文

MultiDex 是为了解决 Android 5.0 以下 Dex 方法的数量或者类的数量超过 65535 这个问题的方案。在当前应用功能膨胀的情况下,我们需要对 Dex 做一些规划。由于 mPaaS 接入方式是基于 bundle。在打包的时候,bundle 会尝试和用户的 Dex 做一次合并,但 mPaaS 会优先保证用户的首个 Dex 的顺序。在这种情况下,为了接入 mPaaS,请您尽量避免在 Application 中添加过多的逻辑,使得第一个 dex 尽可能的小。您可以使用 --main-dex-list 参数指定您在第一个 Dex 中的类。如果您的 apk 中第一个 Dex 类过多导致 mPaaS 必要的几个 bundle 无法合并的话,可能在 Android 5.0 以下的运行时环境中造成无法启动框架(ClassNotFound 或者 ClassNotDef 等问题)。

注意事项

  1. 接入 mPaaS Inside 的时候,我们已经提供了 MultiDex,因此您可以把官方提供的 MultiDex 从 implementation 中删除。

    1. dependencies{
    2. implementation 'com.android.support:multidex:1.0.3' //删除此行
    3. }

    同时,建议您在 gradle 中的 android 这个模块下,把 multiDexEnabled true 加上。

    1. android {
    2. defaultConfig {
    3. multiDexEnabled true
    4. }
    5. }
  2. 如果您使用了 mPaaS Inside,同时不接入热修复,并且您需要 MultiDex 支持的话,您依旧要在Application中调用MultiDex.install(this)

    1. public class App extends Application() {
    2. public void attachBaseContext(Context context) {
    3. super.attachBaseContext(context);
    4. MultiDex.install(this);
    5. }
    6. }
  3. 如果您使用了热修复,也就是使用了 QuinoxlessApplication,您不需要在代码中显式调用。