您的位置:华清远见教育科技集团 >> 新闻动态 >> Android资料 >> DEX文件和APK加载优化  
 
DEX文件和APK加载优化
分享到:

在Android中,对编译出来的DEX字节码和APK文件的加载过程,也进行了尽可能的优化。

对于预置应用,Android会在系统编译后,生成优化文件,以ODEX后缀结尾,这样在发布时除APK文件(不包含DEX)外,还有一个相应的ODEX文件。

对于非预置应用,运行前,Android会优化DEX文件,在第一次启动应用时,执行文件的DEX被优化成DEY文件并放在/data/dalvik-cache目录。如果应用的APK文件不发生变化,DEX文件不会被重新生成,加快了以后的启动速度。APK文件的加载过程如图1-1所示。


图1-1 APK加载

DEX文件由header、string_ids、type_ids、proto_ids、field_ids、method_ids、class_defs、data等几部分构成。图1-2显示了这几部分内容在DEX文件中的布局。


图1-2 DEX格式

在Java中,每一个类会被编译成相应的CLASS文件,一个应用会定义若干个类,这就导致同一个应用的多个CLASS文件中会存在冗余信息,而在Android中,“dx”工具会将同一个应用的所有CLASS文件内容整合到一个DEX文件中,这样就减小了整体的文件尺寸,I/O操作也提高了类的查找速度。“dx”工具整合CLASS文件的过程如图1-3所示。


图1-3 “dx”工具整合CLASS文件的过程

原来每个CLASS文件中的常量池,在DEX文件中由一个常量池来统一管理,具体如图1-4所示。


图1-4 DEX的常量池

具体到DEX文件,经过“dx”工具优化后的内部逻辑如图1-5所示。


图1-5 DEX的内部逻辑

 更多相关文章

·Android Java JNI机制详解
·Android IBinder通信机制
·Android ONC RPC远程调用
·Dalvik虚拟机原生方法的注册
·Android Dalvik虚拟机启动