我们的应用程序在apk中有3个dexes,它们是由gradle具有multidex功能构建的.
安装应用程序后,
>主dex和第二dex是否由同一类加载器加载?
>如何检查第二个(classes2.dex)和第三个是否已完成加载?我可以动态检查代码吗?
>或者你们可以介绍有关Android中的class(或dex)加载过程的任何相关文档吗?我对此并不熟悉.
谢谢.
解决方法:
我尚未深入研究ART代码,但您可以阅读Multidex支持库对Dalvik here所做的工作:
>是的.所有敏捷中的类均由相同的ClassLoader加载.当您的应用程序加载时,MultiDex工具:
>从.apk中提取多余的dex文件,并将它们放在数据目录中自己的.zip文件中(以便它们与APK和ClassLoader不能区分开),
>从您的应用程序的上下文中获取ClassLoader,并将这些新的.zip文件添加到ClassLoader所了解的列表中.
相同的ClassLoader不仅加载了单独的dexes,还使用了不带MultiDex的相同的ClassLoader来加载它们.
>当您的应用程序加载时,应该自动设置额外的dexes.检查此代码并不容易,但是您可以通过检查设备的日志在本地进行验证.
>有一些Android docs about the architecture of ART and Dalvik.但是,没有什么比阅读源代码更好的了:)