|
发表于 2021-12-15 16:11:25
|
显示全部楼层
|阅读模式
IP:山东省 移动/数据上网公共出口
登录后更精彩...O(∩_∩)O...
您需要 登录 才可以下载或查看,没有账号?立即注册
×
本帖最后由 mind 于 2021-12-15 16:22 编辑
DexClassLoader加载流程
总结:过程中出现dex起始地址和大小的还是可以进行dump的。另外,openDexFileNative中的dex2oat的流程可以dump,但是有些壳干掉了这个流程,不一定可以dump下来,
还是先来到DexClassLoader的初始化函数
路径:8.0.0_r4/xref/libcore/dalvik/src/main/java/dalvik/system/DexClassLoader.java
进入BaseDexClassLoader
路径:
8.0.0_r4/xref/libcore/dalvik/src/main/java/dalvik/system/BaseDexClassLoader.java
进入DexPathList
路径:
8.0.0_r4/xref/libcore/dalvik/src/main/java/dalvik/system/DexPathList.java
进入makeDexElements
进入loadDexFile
进入DexFile.loadDex
路径:
8.0.0_r4/xref/libcore/dalvik/src/main/java/dalvik/system/DexFile.java
进入DexFile构造函数
进入openDexFile
进入openDexFileNative,已经到了native函数
进入native函数实现
路径:
8.0.0_r4/xref/art/runtime/native/dalvik_system_DexFile.cc
进入OpenDexFilesFromOat就是编译dex2oat的过程
OpenDexFilesFromOat->MakeUpToDate->GenerateOatFileNoChecks->Dex2Oat(这里已经开始准备需要编译的参数了)->Exec->ExecAndReturnCode
阻断dex2oat会增加app启动速度
如果阻断了dex2oat生成,OpenDexFilesFromOat函数就会走到以下流程加载dex文件,通过调用DexFile::Open最终又会走到openCommon函数
流程和InMemoryDexClassLoader基本差不多,主要还是在dex2oat的流程中,最终都会走到openCommon
————————————————
版权声明:本文为CSDN博主「986227498」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_34581212/article/details/108731786
|
|