理论教育 加载APK文件和DEX文件

加载APK文件和DEX文件

时间:2023-06-19 理论教育 版权反馈
【摘要】:具体来说有如下两点优化工作:对于预置应用:Android会在系统编译后,生成优化文件,以ODEX后缀结尾,这样在发布时除APK文件外,还有一个相应的ODEX文件。如果在使用APK文件的过程中不发生变化,则就不会重新生成DEX文件,这样便加快了以后的启动速度。图6-13显示了这几部分内容在DEX文件中的布局。原来每个CLASS文件中的常量池,在DEX文件中由一个常量池来统一管理。图6-14 dx工具整合CLASS文件的过程具体到DEX文件,经过dx工具优化后的内部逻辑如图6-15所示。

加载APK文件和DEX文件

在Android系统中,对编译出来的DEX字节码和APK文件的加载过程,也进行了尽可能的优化。具体来说有如下两点优化工作:

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

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

加载过程如图6-12所示。

978-7-111-51616-3-Part02-398.jpg

图6-12 加载过程

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

978-7-111-51616-3-Part02-399.jpg(www.daowen.com)

图6-13 在DEX文件中的布局

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

978-7-111-51616-3-Part02-400.jpg

图6-14 dx工具整合CLASS文件的过程

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

978-7-111-51616-3-Part02-401.jpg

图6-15 经过dx工具优化后的内部逻辑

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈