大家好,又见面了,我是你们的朋友全栈君。
文章目录
- 1, 什么是dex文件
- 2, 如何生成一个dex文件
- 3, dex文件的作用
- 4, dex文件格式详解
- 5, 与class对比
1, 什么是dex文件
能被 dvm识别, 加载并执行的文件格式
2, 如何生成一个dex文件
- 通过ide工具自动build生成
- 手动通过dx命令去生成dex文件
– de命令在sdk文件下build-tools下相应的版本文件夹下
–
javac Hello.java
生成class文件 –dx --dx --output Hello.dex Hello.class
生成dex文件 - 手机中手动运行dex文件
–
adb push Hello.dex /sdcard
push到手机sd卡目录下 –adb shell
进入手机shell –dalvikvm -cp /sdcard/Hello.dex Hello
执行dex文件
3, dex文件的作用
记录整个工程中所有类文件
的信息
4, dex文件格式详解
- 是一种8位字节的二进制流文件
- 各个数据按顺序紧密的排列, 无间隙
- 整个应用中所有class源文件都放在一个dex文件中
dex文件结构图:
dex文件头:
在这里插入图片描述用010editor 查看信息如下:
- struct header_item dex_header: 头文件信息, 包含了头文件中的字段
- struct string_id_list dex_string_ids: 记录整个应用中的字符串
- struct type_id_list dex_type_ids: 类型索引
- struct proto_id_list dex_proto_ids: 方法申明索引
- struct field_id_list dex_field_ids: 字段索引
- struct method_id_list dex_method_ids: 方法索引, 包含当前类的所有方法, 所引用的方法及父类的所有方法
- struct class_def_item_list dex_class_defs: dex文件中所有类的申明
- struct map_list_type dex_map_list: 对头文件的校验
5, 与class对比
- 本质上它们是一样的, dex是从class文件演变而来
- class文件存在许多冗余信息, dex会去除冗余, 并整合
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/153507.html原文链接:https://javaforall.cn