如何在我的应用程序安装后检查第二个 dex 是否加载完成?
How to check if the second dex was loaded completed or not after my application was installed?
我们的应用程序在由 gradle 构建的具有 multidex 功能的 apk 中具有三个索引。
安装应用程序后,
主 dex 和次 dex 是否由同一个 class 加载程序加载?
如何查看第二个(classes2.dex)和第三个是否加载完成?我可以在代码中动态检查它吗?
或者大佬能介绍下class(或dex)在Android中加载过程的相关文档吗?我不熟悉这个。
谢谢。
我没有深入研究 ART 代码,但您可以阅读 Multidex 支持库对 Dalvik 的作用here:
- 是的。所有索引中的 类 都由相同的
ClassLoader
加载。当您的应用程序加载时,MultiDex
检测:
- 从 .apk 中提取额外的 dex 文件并将它们放入数据目录中自己的 .zip 文件中(以便它们与 APK 和
ClassLoader
无法区分),
- 从您的应用程序的上下文中获取
ClassLoader
,并将这些新的 .zip 文件添加到 ClassLoader
反射知道的列表中。
不仅单独的 dexes 由同一个 ClassLoader 加载,它们还由同一个 ClassLoader 加载,在没有 MultiDex 的情况下使用。
额外的索引应该在您的应用程序加载时自动设置。在代码中检查此内容并不容易,但您可以通过检查设备的日志在本地进行验证。
有一些Android docs about the architecture of ART and Dalvik。但是,没有什么比阅读源代码更好的了:)
我们的应用程序在由 gradle 构建的具有 multidex 功能的 apk 中具有三个索引。
安装应用程序后,
主 dex 和次 dex 是否由同一个 class 加载程序加载?
如何查看第二个(classes2.dex)和第三个是否加载完成?我可以在代码中动态检查它吗?
或者大佬能介绍下class(或dex)在Android中加载过程的相关文档吗?我不熟悉这个。
谢谢。
我没有深入研究 ART 代码,但您可以阅读 Multidex 支持库对 Dalvik 的作用here:
- 是的。所有索引中的 类 都由相同的
ClassLoader
加载。当您的应用程序加载时,MultiDex
检测:- 从 .apk 中提取额外的 dex 文件并将它们放入数据目录中自己的 .zip 文件中(以便它们与 APK 和
ClassLoader
无法区分), - 从您的应用程序的上下文中获取
ClassLoader
,并将这些新的 .zip 文件添加到ClassLoader
反射知道的列表中。
- 从 .apk 中提取额外的 dex 文件并将它们放入数据目录中自己的 .zip 文件中(以便它们与 APK 和
不仅单独的 dexes 由同一个 ClassLoader 加载,它们还由同一个 ClassLoader 加载,在没有 MultiDex 的情况下使用。
额外的索引应该在您的应用程序加载时自动设置。在代码中检查此内容并不容易,但您可以通过检查设备的日志在本地进行验证。
有一些Android docs about the architecture of ART and Dalvik。但是,没有什么比阅读源代码更好的了:)