Android热修复和插件化(一)class文件和dex文件解析

时间:2022-04-23 17:17:58

一、热修复解决的问题

1、热修复所能解决的问题

1、刚发布的应用就出现比较严重的BUG
2、有一些小的功能即时推送给用户去使用

2、热修复所能解决的问题

1、解决应用越来越大所带来的技术限制
2、解决应用越来越大所带来的合作开发问题

3、class文件的解析

1、什么是class文件

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

Android热修复和插件化(一)class文件和dex文件解析

2、如何生成一个class文件

1、通过IDE自动帮我们build
2、通过javac命令手动生成.class文件
3、通过java命令执行class文件

javac Hello.java 生成Hello.class文件
java Hello 输出

3、class文件的作用

记录一个类中所有的信息,记住是所有(类的名称、方法、变量等)
.class文件中记录的信息要远远多于java源文件(比如说this,super明明没有定义,为什么可以调用)

4、class文件格式详解

1、是一种8位二进制流文件
2、各个数据紧密排列,无间隙(减小体积)
3、每个类或接口都独自管理一个class文件

Android热修复和插件化(一)class文件和dex文件解析

u4表示无符号4位
access_flags的取值范围

Android热修复和插件化(一)class文件和dex文件解析

5、class文件的弊端

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

4、dex文件的解析

1、什么是dex文件

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

2、如何生成一个dex文件

1、通过IDE自动帮我们build
2、通过dx命令手动生成.dex文件

3、dex文件的作用

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

4、dex文件格式详解

1、是一种8位二进制流文件
2、各个数据按顺序紧密排列,无间隙(减小体积)
3、整个应用中所有的java原文件都放在一个dex中

Android热修复和插件化(一)class文件和dex文件解析

Android热修复和插件化(一)class文件和dex文件解析

5、class和dex文件的对比

1、本质上是一样的,dex文件是由class文件演变而来
2、class文件存在许多冗余信息(每一个class都有一个常量池),而dex文件去除了这些冗余信息,并整合
Android热修复和插件化(一)class文件和dex文件解析