Apk解析

Apk解析

系统为每个APK创建进程时,都会通过PathClassLoader类进行加载,同时开发者也可以通过DexClassLoader动态加载额外的Dex文件,有点类似于dlopendlsym函数的作用。PathClassLoaderDexClassLoader两者都承继自BaseDexClassLoader,最终都是通过DexFile完成对dex的加载。一般情况下每个ClassLoader对应一个DexFile,但其本身是可以包含多个DexFile的,当要加载一个Class时,会遍历各个DexFile

DexFile底层是通过JNI方式实现的,针对APK文件(包括jarzip)和二进制字节流,系统分别提供了dvmDexFileOpenFromFddvmDexFileOpenPartial两个函数进行处理。这两个流程最终目的都是构造出DexOrJar结构体,并通过JNI接口把该结构体的地址保存到DexFile的私有成员变量mCookieDexOrJar结构主要由RawDexFileJarFile组成。

上一页
下一页