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

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 等问题)。

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

  • 接入 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. }
  • 如果您使用了 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. }
  • 如果您使用了热修复,也就是使用了 QuinoxlessApplication,您不需要在代码中显式调用。