美文网首页
class文件与dex文件解析

class文件与dex文件解析

作者: 卡路fly | 来源:发表于2020-05-15 12:19 被阅读0次

class文件

能够被jvm识别,加载并执行的文件格式

class文件生成

  1. 通过IDE自动build
  2. javac手动生成
    通过java命令执行

class文件作用

记录一个类文件的所有信息

class文件结构

  • 一种8位字节的二进制流文件
  • 各个数据按顺序紧密排列,无间隙
  • 每个类或接口都单独占据一个class文件
image.png
字段 名称 数据类型 数量 描述
magic 魔数 u4 1 class文件的标志,判断一个文件是不是class格式文件的标准
minor_version 副版本号 u2 1
major_version 主版本号 u2 1
constant_pool_count 常量池大小 u2 1
constant_pool 常量池 cp_info count_pool_count-1
access_flag 访问标志 u2 1
this_class 当前类索引 u2 1
super_class 父类索引 u2 1
interfaces_count 接口索引集合大小 u2 1
interfaces 接口索引集合 u2 interfaces_count
fields_count 字段索引集合大小 u2 1
fields 字段索引集合 field_info field_count
methods_count 方法索引集合大小 u2 1
methods 方法索引集合 method_info method_count
attributes_count 属性索引集合大小 u2 1
attributes 属性索引集合 attribute_info attribute_count

详情:https://kaiwu.lagou.com/course/courseInfo.htm?courseId=67#/detail/pc?id=1857

class文件弊端

  • 内存占用大,不适合移动端
  • 堆栈的加栈模式,加载速度慢
  • 文件IO操作多,类查找慢

dex文件

能够被DVM识别,加载并执行的文件格式

生成方式

  1. 通过IDE自动build
  2. dx命令手动生成
// 生成dex
dx --dex --output Hello.dex Hello.class

// adb push到手机
adb push Hello.dex /storage/emulated/0

// run起来
dalvikvm -cp /sdcard/Hello.dex Hello

作用

记录整个工程中所有类文件的信息

文件结构

  • 一种8位字节的二进制流文件
  • 各个数据按顺序紧密排列,无间隙
  • 整个应用中所有java源文件都放在一个dex中

两者异同

  • 本质上class文件和dex文件一样,dex是从class文件演变而来的
  • class文件存在许多冗余信息,dex会除去冗余并整合
  • dex优点:通过一个dex文件存贮了所有java源代码,极大的减小了dex体积,更适合移动端

相关文章

网友评论

      本文标题:class文件与dex文件解析

      本文链接:https://www.haomeiwen.com/subject/abqcohtx.html