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

时间:2015-09-24 07:24:53

标签: android multidex dexclassloader

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

安装应用程序后,

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

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

  3. 或者你们可以介绍一下有关Android中类(或dex)加载过程的任何相关文档吗?我对此并不熟悉。

  4. 谢谢。

1 个答案:

答案 0 :(得分:3)

我没有深入研究ART代码,但您可以阅读Multidex支持库为Dalvik here所做的事情:

  1. 是。所有dexes中的类都由相同的ClassLoader加载。加载应用程序时,MultiDex检测:
    • 从.apk中提取额外的dex文件,并将它们放在数据目录中的自己的.zip文件中(这样它们与APK无法区分到ClassLoader),
    • 从应用程序的上下文中获取ClassLoader,并将这些新的.zip文件添加到ClassLoader反复知道的列表中。
  2. 不仅由相同的ClassLoader加载单独的dexes,它们由没有MultiDex时使用的相同ClassLoader加载。

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

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