【Java 虚拟机原理】动态字节码技术 | Dalvik & ART 虚拟机 | Android 字节码打包过程

举报
韩曙亮 发表于 2022/01/14 00:31:41 2022/01/14
【摘要】 文章目录 一、动态字节码技术二、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 虚拟机

文章来源: hanshuliang.blog.csdn.net,作者:韩曙亮,版权归原作者所有,如需转载,请联系作者。

原文链接:hanshuliang.blog.csdn.net/article/details/120120295

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。