DEX 文件和APK 加载

来源:互联网 发布:淘宝gtx1060 编辑:程序博客网 时间:2024/05/17 02:06

DEX 文件和APK 加载

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

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

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

 

图2-15 APK加载

DEX 文件由header、string_ids、type_ids、proto_ids、field_ids、method_ids、class_defs、data 等几部分构成。图2-16 显示了这几部分内容在DEX 文件中的布局。
 图2-16 DEX格式在Java 中,每一个类会被编译成相应的CLASS 文件,一个应用会定义若干个类,这就导致同一个应用的多个CLASS 文件中会存在冗余信息,而在Android 中,“dx”工具会将同一个应用的所有CLASS文件内容整合到一个DEX文件中,这样就减小了整体的文件尺寸,I/O 操作也提高了类的查找速度。“dx”工具整合CLASS文件的过程如图2-17 所示。
 图2-17 “dx”工具整合CLASS 文件的过程原来每个CLASS文件中的常量池,在DEX 文件中由一个常量池来统一管理,具体如图2-18 所示。
 图2-18 DEX的常量池具体到DEX 文件,经过“dx”工具优化后的内部逻辑如图2-19 所示。
 图2-19 DEX的内部逻辑
0 0
原创粉丝点击