如何在我的应用程序安装后检查第二个 dex 是否加载完成?

How to check if the second dex was loaded completed or not after my application was installed?

我们的应用程序在由 gradle 构建的具有 multidex 功能的 apk 中具有三个索引。

安装应用程序后,

  1. 主 dex 和次 dex 是否由同一个 class 加载程序加载?

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

  3. 或者大佬能介绍下class(或dex)在Android中加载过程的相关文档吗?我不熟悉这个。

谢谢。

我没有深入研究 ART 代码,但您可以阅读 Multidex 支持库对 Dalvik 的作用here

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

不仅单独的 dexes 由同一个 ClassLoader 加载,它们还由同一个 ClassLoader 加载,在没有 MultiDex 的情况下使用。

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

  2. 有一些Android docs about the architecture of ART and Dalvik。但是,没有什么比阅读源代码更好的了:)