android - 说明安装 MultiDex 后会发生什么
问题描述
安装 MultiDex 后,我注意到,首次启动应用程序需要额外的 4-5 秒。然而,经过一些研究,我注意到手机设置(应用程序管理器)中的应用程序大小从 7 MB 变为 19 MB,如果我清除数据,应用程序又回到 7 MB。但是每次我第一次启动应用程序时,应用程序的大小都会增加一倍以上。
现在我的问题是,是什么导致了应用程序大小增加了这么多?
到目前为止,我在 slackoverflow 上找到了一些关于 MultiDex 的主题,但没有人谈论代码真正发生了什么,以及 MultiDex 保存/缓存的数据类型。
解决方案
Multi-Dexing 在您的 gradle 中启用并在您的 Application 类中扩展。
当您使用超过 64,000 种方法时使用此选项。
https://developer.android.com/studio/build/multidex
如果您遇到多 dex 需求,我会说可能有 90% 的时间,您可能没有正确管理您的依赖项。我不是每次都说。但是,通常问题是人们引入了整个 Google 依赖项,而不仅仅是您需要的那些。例如 Google Play 服务。如果你包含这个,它会立即迫使你进入多索引。但是,这确实会影响性能。您现在有多个 dex 文件要加载。当然,对于不会改变的事物(例如 3rd 方依赖项)有一些预索引,以帮助您加快构建和部署速度。但是,拥有多个查找表会带来速度后果。例如,如果您包括在内。
com.google.android.gms
仅其中就有大约 44,000 种方法,您应该指定您想要的方法
com.google.android.gms:play-services-location:16.0.0
例如。因此,在您开始使用 Multi-Dex 之前,请确保您已正确清理了未使用的依赖项,并且您正在正确管理传递依赖项树。另外不要忘记使用 ProGuard 或新的 D8 缩小过程,因为这也可能对您有所帮助,尽管如果您有大量依赖项,可能还需要您在 Debug 中运行。
如果你已经完成了所有这些,但你仍然需要使用 Multi-Dex(我在大型公司遇到过这种情况,迫使你使用大量臃肿的库),那么你就去做吧。
现在说到发生了什么,Dex 代表 Dalvik Executable。它是将代码打包成 Dalvik 字节以供执行的过程。这仅限于 65,536 种方法。他们在文档中说 64k,但我读过的所有地方都显示 65k+。许多 Google 的库已经包含 17k 种方法,这使您可以直接使用 1/4 的方法。
我相信这个问题与每个方法签名和查找表的 2 个字节的标头分配有关。他们可以创建的唯一 ID 数量受到限制。所以它需要你为方法签名创建多个带有多个查找表的 dex 文件。所以简短的回答是,它制作了多个 Dalvik 可执行文件,以确保在 Dalvik 虚拟机上正确找到和执行唯一的方法签名。
其他需要注意的重要事项是,在 Android API 21 之前,虚拟机仅支持 1 个 dex 文件。因此,您需要在应用程序 onCreate 上进行多 dex 安装,以正确引入其余部分。但是,如果您使用 proguard,您的附加 dex 文件可能已被删除,因此您可能还需要处理 MultDexProguard 文件。
现在,重要的是要意识到 Android 完全重做了他们的虚拟机,并且不再依赖 Dex 来构建他们的现代操作系统虚拟机。那么下一个问题是“你还应该使用它吗”?
好吧,如果您仍然需要支持棒棒糖之前的版本,那么您最好保留您的 multi-dex。否则,如果你是棒棒糖及以上。Android 使用 ART(Android Runtime),没有这个限制。老实说,拥有前棒棒糖的人口太少了,我个人认为不值得支持,但这取决于您的产品和您的需求。
希望这有助于阐明这里的一些事情。
快乐编码
推荐阅读
- java - MonetaryAmount.plus() 用于什么?要将其映射到哪个 Kotlin 运算符?
- c - 使用结构扫描和显示板球运动员输入的 AC 程序
- c - 如果一个 C 函数被调用两次,它会创建一个在函数中声明两次的变量吗?
- reactjs - 如何在 CodeSandbox React JS 中使用 BrowserRouter 和 Route?
- javascript - 是否可以在没有用户身份验证的情况下使用 navigator.getDisplayMedia?
- javascript - 为什么元素从设备移动到设备?
- selenium - 抓取Linkedin搜索结果
- c# - 是否可以在.net core Web api中调用js库
- airflow - 启动时的apache气流变量
- jquery - 引导选择附加选项并选择项目