Java 虚拟机原理动态字节码技术 | Dalvik & ART 虚拟机 | Android 字节码打包过程
Posted 韩曙亮
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 虚拟机原理动态字节码技术 | Dalvik & ART 虚拟机 | Android 字节码打包过程相关的知识,希望对你有一定的参考价值。
一、动态字节码技术
动态字节码技术 就是在 运行时 , 动态修改 Class 字节码 数据 ;
如 : 修改下面字节码文件中的二进制数据信息 ;
动态字节码技术实现 :
- 首先 , 要 分析整个 Class 字节码中的信息 ;
- 然后 , 找到要修改的字节码 数据位置 ;
- 最后 , 替换对应的二进制数据 ;
常用的动态字节码技术 :
- Javassist : 创建 / 分析 / 编辑 Java 字节码文件 ;
- ASM : 操作 / 分析 Java 字节码文件 ;
使用 Javassist 框架 , 可以自动查找要修改的内容所在字节码文件中的位置 , 不需要开发者自己手动分析 Java 字节码文件 ;
二、Dalvik & ART 虚拟机
android 5.0 5.0 5.0 之前使用 Dalvik 虚拟机 . 5.0 5.0 5.0 之后使用 ART 虚拟机 ;
Dalvik 已经被淘汰 , 目前重点学习 ART 即可 ;
JVM 与 Dalvik 虚拟机区别 :
- JVM 是基于栈的 ; 打包后的字节码文件是 jar 文件 ;
- Dalvik 是基于寄存器的 ; 打包后的字节码文件是 dex 文件 ; 程序在 CPU 上运行 , 通过执行寄存器上的指令对数据进行操作 ;
jar 文件与 dex 文件 对比图 :
JVM 中有 JIT 即时编译器 , 代码在运行时 , 边解释 , 边运行 , 如果有一段代码经常运行 , 则可以通过 JIT 即时编译器 提前准备 ,
三、Android 字节码打包过程
Android 源码打包成安装文件 , 安装到设备中 , 最后执行应用程序 , 期间的各种执行细节 ;
- 编写好 Java 源码文件 ;
- 使用 javac 工具 , 将 Java 源码编译成 class 字节码文件 ;
- 使用 dx 工具 , 将 class 字节码文件打包到 dex 文件中 ;
- 通过 APK Builder 将 dex 文件 / 资源文件 / AIDL 文件 / SO 动态库 等 , 打包到 APK 安装包中 ;
总结
推荐书籍 :
- 深入理解Java虚拟机
- 深入理解Android 虚拟机
以上是关于Java 虚拟机原理动态字节码技术 | Dalvik & ART 虚拟机 | Android 字节码打包过程的主要内容,如果未能解决你的问题,请参考以下文章
Java 虚拟机原理线程栈 | 栈帧 | 局部变量表 | 反汇编字节码文件 | Java 虚拟机指令手册 | 程序计数器
Java 虚拟机原理Class 字节码二进制文件分析 一 ( 字节码文件附加信息 | 魔数 | 次版本号 | 主版本号 | 常量池个数 )