3

我们的应用程序在 apk 中有三个 dex,它们是由 gradle 构建的,具有 multidex 功能。

安装应用程序后,

  1. 主 dex 和第二个 dex 是否由同一个类加载器加载?

  2. 如何检查第二个( classes2.dex )和第三个是否已加载完成?我可以在代码中动态检查它吗?

  3. 或者你们能介绍一下关于Android中类(或dex)加载过程的任何相关文档吗?我不熟悉这个。

谢谢你。

4

1 回答 1

3

我还没有深入研究 ART 代码,但您可以在此处阅读 Multidex 支持库为 Dalvik 所做的工作:

  1. 是的。所有 dex 中的类都由相同的ClassLoader. 当您的应用程序加载时,MultiDex仪器:
    • 从 .apk 中提取额外的 dex 文件,并将它们放在自己的 .zip 文件中的数据目录中(以便它们与 APK 无法区分ClassLoader),
    • 从您的应用程序的上下文中获取ClassLoader,并将这些新的 .zip 文件添加到ClassLoader反射性知道的列表中。

不同的 dex 不仅由同一个 ClassLoader 加载,它们还由同一个 ClassLoader 加载,无需 MultiDex 即可使用。

  1. 当您的应用程序加载时,应自动设置额外的 dex。检查此代码并不容易,但您可以通过检查设备的日志在本地进行验证。

  2. 有一些关于 ART 和 Dalvik 架构的 Android 文档。但是,没有什么比阅读源代码更好的了 :)

于 2015-09-24T09:10:39.610 回答