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 字节码打包过程的主要内容,如果未能解决你的问题,请参考以下文章

JVM字节码执行引擎和动态绑定原理

Java 虚拟机原理线程栈 | 栈帧 | 局部变量表 | 反汇编字节码文件 | Java 虚拟机指令手册 | 程序计数器

简述java虚拟机的工作原理

java虚拟机工作原理?

java虚拟机工作原理?

Java 虚拟机原理Class 字节码二进制文件分析 一 ( 字节码文件附加信息 | 魔数 | 次版本号 | 主版本号 | 常量池个数 )