第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体现结构