美文网首页
Android热修复1、class文件与dex文件解析

Android热修复1、class文件与dex文件解析

作者: flynnny | 来源:发表于2021-03-27 23:51 被阅读0次

Android热修复1、class文件与dex文件解析https://www.jianshu.com/p/dea6a368944d
Android热修复2、虚拟机深入讲解https://www.jianshu.com/p/17f7843e09bc
Android热修复3、ClassLoader原理讲解https://www.jianshu.com/p/e3970180a002
Android热修复4、热修复简单讲解https://www.jianshu.com/p/1691685aeedf
Android热修复5、AndFix详解https://www.jianshu.com/p/1cfad3d1079a
Android热修复6、Tinker详解及两种方式接入https://www.jianshu.com/p/0ae5c0c259d1
Android热修复7、引入热修复后代码及版本管理https://www.jianshu.com/p/cd5104a6205c
阿里 :优酷、支付宝
腾讯系:微信

解决问题:
1刚发布应用就发现了严重bug。
2小功能想即时推送给用户(特定节日界面变化)

提前需要对dex和class有基本了解

1、class文件结构深入解析

什么是class文件

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

java语言、Scala语言、Python语言、其他语言 都能生成class文件。

如何生成class文件、几种途径(重点)

两种途径:
.通过IDE自动生成帮我们build
.手动通过javac去生成class文件

class文件作用

记录一个类文件中所有信息,记住是所有。
class中记录的信息远远多于源代码(this、super等)

class文件结构详解(核心知识)

宏观上:
1一种8位字节的二进制流文件;
2各个数据顺序紧密排列,无间隙;
3每个类或接口都单独占据一个class文件;

class详细结构:

1.png

access_flags取值范围

2.png

constant_pool所包含的内容

3.png

分别存储我们class中的integer、long、string类型、及short、byte等(这里没有列举)

4.png

分别存储我们class中类相关信息、field、method相关信息。
*具体查看一个class可使用010Editor

class文件弊端

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

2、dex文件结构深入解析

什么是dex

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

可以通过C/C++生成dex文件

如何生成dex(重要)

.通过IDE自动帮我们build生成
.手动通过dx命令去生成dex文件(ide原理也是dx)

生成dx文件:(需配置环境变量:sdk/最高版本/dx)

dx --dex --output Hello.dex Hello.class

执行dx文件:(需连上手机)

dalvikvm -cp /sdcard/Hello.dex Hello
5.png

dex文件作用

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

dex文件格式详解(核心)

.一种8位字节的二进制流文件
.各个数据按顺序紧密排列,无间隙
.整个应用中所有的Java源文件都在一个dex中(不考虑mutidex技术)

6.png 7.png 8.png

3、class与dex文件对比

.本质上一样,dex是从class文件演变而来
.class文件存在许多冗余信息,dex会去除冗余,并合并
如图:

9.png

相关文章

网友评论

      本文标题:Android热修复1、class文件与dex文件解析

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