【Java 虚拟机原理】动态字节码技术 | Dalvik ART 虚拟机 | Android 字节码打包过程
文章目录
- 一、动态字节码技术
- 二、Dalvik & ART 虚拟机
- 三、Android 字节码打包过程
- 总结
一、动态字节码技术
动态字节码技术 就是在 运行时 , 动态修改 Class 字节码 数据 ;
如 : 修改下面字节码文件中的二进制数据信息 ;
动态字节码技术实现 :
- 首先 , 要 分析整个 Class 字节码中的信息 ;
- 然后 , 找到要修改的字节码 数据位置 ;
- 最后 , 替换对应的二进制数据 ;
常用的动态字节码技术 :
- Javassist : 创建 / 分析 / 编辑 Java 字节码文件 ;
- ASM : 操作 / 分析 Java 字节码文件 ;
使用 Javassist 框架 , 可以自动查找要修改的内容所在字节码文件中的位置 , 不需要开发者自己手动分析 Java 字节码文件 ;
二、Dalvik & ART 虚拟机
Android 5.05.05.0 之前使用 Dalvik 虚拟机 . 5.05.05.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 字节码打包过程相关推荐
- Android源码分析(十一)-----Android源码中如何引用aar文件
一:aar文件如何引用 系统Settings中引用bidehelper-1.1.12.aar 文件为例 源码地址:packages/apps/Settings/Android.mk LOCAL_PAT ...
- 一对一视频直播源码|手机视频直播平台android源码/可打包视频直播
源码介绍 一对一视频直播源码|手机视频直播平台android源码集视频.语音.动态.直播.社交等功能于一身. 前端功能说明: 登入注册:手机验证码登入.编辑个人信息.上传头像 首页直播:查看主播用户. ...
- 移动安全--7--JVM / Dalvik / ART虚拟机
7-1.关于Dalvik和ART虚拟机 1.Android4.4之前的Android运行时是Dalvik虚拟机.它使用即时编译. 2.Android4.4中引入了ART虚拟机,但默认的Android运 ...
- Dalvik/ART(ANDROID)中的多线程机制(4)
在java中创建一个线程, new Thread对象, 并调用它的start()方法, 这是每一个java程序员都知道的事.在linux C中创建一个线程, 使用pthread_create(& ...
- android 源码中的单例,Android源码中的一种单例实现
单例模式的实现方式有懒汉,饿汉,双重校验锁,枚举,内部类等等,写法就不全部列举了.Android源码中有一个单例辅助类/frameworks/base/core/java/android/util/S ...
- 【Java 虚拟机原理】线程栈 | 栈帧 | 局部变量表 | 反汇编字节码文件 | Java 虚拟机指令手册 | 程序计数器
文章目录 一.线程栈 二.栈帧 三.栈帧 - 局部变量表 四.反汇编字节码文件 五.Java 虚拟机指令手册 六.程序计数器 一.线程栈 装载 HelloWorld.class 字节码文件到 Java ...
- Dalvik/ART(ANDROID)中的多线程机制(3)
封装任务 Message 在整个消息处理机制中,message又叫task,封装了任务携带的信息和处理该任务的handler.message的用法比较简单,这里不做总结了.但是有这么几点需要注意(待补 ...
- Dalvik/ART(ANDROID)中的多线程机制(2)
Android消息处理机制(二) 角色综述(回顾): (1)UI thread通常就是main thread,而Android启动程序时会替它建立一个MessageQueue. (2)当然需要一个Lo ...
- eclipse查看android源码包(eclipse导入android源码包)
以前会,后来好长时间不稿,忘了,还是记下来: 下载对应版本的源码包比如:android-2.3-src.rar,android-2.3.3-src.rar, 下载完后,在对应版本的platforms里 ...
最新文章
- CNVD初次获取的源代码格式
- 14PS中的切图基本操作
- 开始启动OPNsense的汉化工作
- java reflection list_Java Reflection(九):泛型
- 关于querySelector 和 document.getElementsByTagName 选中集合问题
- Qt中修改应用程序和标题栏的图标
- MySQL—用户和权限管控
- 啥?不用安装Jre,SpringBoot项目也可以打包exe应用程序运行!
- hibernate中java类的成员变量类型如何映射到SQL中的数据类型变化
- Oracle正版用户授权
- Illustrator CS4 序列号
- ELK抓取AWS-ELB日志的logstash配置文件
- 胶片效果滤镜渲染工具:DxO FilmPack Mac
- 帝国理工大学计算机本科笔试题,共同努力 成功申请帝国理工学院计算机科学专业...
- 东南大学计算机学院学办董烨,东南大学计算机教学实验中心(国家级)
- Not Shading英语翻译
- 微型计算机原理实验二,微机原理实验2
- c++实现北京地铁线路查询系统
- 北大计算机考研个人陈述,北大推免研究生个人陈述
- Gephi简易学习[五]———— 分析红楼梦数据,了解Gephi操作流程