前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Java 虚拟机原理】动态字节码技术 | Dalvik & ART 虚拟机 | Android 字节码打包过程

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

作者头像
韩曙亮
发布2023-03-29 16:45:24
6050
发布2023-03-29 16:45:24
举报
文章被收录于专栏:韩曙亮的移动开发专栏

文章目录

一、动态字节码技术


动态字节码技术 就是在 运行时 , 动态修改 Class 字节码 数据 ;

如 : 修改下面字节码文件中的二进制数据信息 ;

在这里插入图片描述
在这里插入图片描述

动态字节码技术实现 :

  • 首先 , 要 分析整个 Class 字节码中的信息 ;
  • 然后 , 找到要修改的字节码 数据位置 ;
  • 最后 , 替换对应的二进制数据 ;

常用的动态字节码技术 :

  • Javassist : 创建 / 分析 / 编辑 Java 字节码文件 ;
  • ASM : 操作 / 分析 Java 字节码文件 ;

使用 Javassist 框架 , 可以自动查找要修改的内容所在字节码文件中的位置 , 不需要开发者自己手动分析 Java 字节码文件 ;

二、Dalvik & ART 虚拟机


Android

5.0

之前使用 Dalvik 虚拟机 .

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 虚拟机
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-09-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、动态字节码技术
  • 二、Dalvik & ART 虚拟机
  • 三、Android 字节码打包过程
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档