[置顶] 第4章 Android odex文件格式 第四节

第4章 odex文件格式 第四节

 

1、 环境配置

Ubuntu 15.10 系统 IP:192.168.153.130

理解odex文件格式

 

一、odex文件格式

1、 odex是OptimizedDEX的缩写,表示经过优化的dex文件。那么odex有什么作用?它的结构右是怎样的呢?

2、 如何生成odex文件?odex有两种存在的方式:

1)      是从apk程序中提取出来,与apk文件存放在同一目录且文件后缀为odex的文件,这类odex文件多是andriodROM的系统程序。

2)      另一种是dalvik-cache缓存文件,这类odex文件仍然以dex作为后缀,存放在cache/dalvik-cache目录下,保存形式为“apk路径@apk名@class.dex”,例如“system@[email protected]@classes.dex”表示安装在/system/app 目录下Calculator.apk 程序的odex文件,而

“data@[email protected]@classess.dex”表示安装在/data/app目录下com.wochacha-1.apk程序的odex文件。

3、 由于Android程序apk文件为zip压缩包格式,Dalvik虚拟机每次加载它们时需要从

Apk中读取classes.dex文件,这样会耗费很多cpu时间,而采用odex方式优化的dex文件,已经包含了加载dex必须的依赖库文件列表,Dalvik虚拟机只需要检测并加载所需的依赖库即可执行相应的dex文件,这大大缩短了读取dex文件所需要的时间,而对于部分andriod系统的ROM,由于将系统app全部转换成外置的odex文件与apk放在同一目录,这样系统在启动加载这些程序时会节省更多的时间,启动速度自然也会更快。

 

4、 如何生成odex文件步骤(注意:这里尽量使用ARM核心的)

1)      使用avd管理工具开启andriod虚拟机

2)      接着上传文件dexopt-wrapper和Hello.zip包到Ubuntu相应的路径中

3)      使用命令上传dexopt-wrapper文件到andriod虚拟机的/data/local/目录下

adb push dexopt-wrapper  /data/local/

4)      将/data/local/dexopt-wrapper文件设为最高权限777

adb shell chmod 777 /data/local/dexopt-wrapper

5)      接着上传Hello.zip文件到andriod虚拟机的/data/local/目录下

adb push Hello.zip  /data/local/

6)      接着使用adb shell 进入android系统内部

7)      接着到/data/local/目录下执行命令“./ dexopt-wrapper  Hello.zip Hello.odex”

8)      最后生成odex优化文件

 

5、 odex文件整体架构

odex文件的结构可以理解为dex文件的一个超集。Odex文件在dex文件头部添加了一些数据,然后再dex文件尾部添加了dex文件的依赖库以及一些辅助数据


Odex文件头

Dex文件

依赖库

辅助数据

 

6、 Hello.odex文件头查看

 

7、 查看整体odex体现结构

 [置顶] 第4章 Android odex文件格式 第四节_第1张图片

你可能感兴趣的:([置顶] 第4章 Android odex文件格式 第四节)