【Java 虚拟机原理】动态字节码技术 | Dalvik & ART 虚拟机 | Android 字节码打包过程
【摘要】
文章目录
一、动态字节码技术二、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)