文章目录

  • 一、动态字节码技术
  • 二、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 字节码打包过程相关推荐

  1. Android源码分析(十一)-----Android源码中如何引用aar文件

    一:aar文件如何引用 系统Settings中引用bidehelper-1.1.12.aar 文件为例 源码地址:packages/apps/Settings/Android.mk LOCAL_PAT ...

  2. 一对一视频直播源码|手机视频直播平台android源码/可打包视频直播

    源码介绍 一对一视频直播源码|手机视频直播平台android源码集视频.语音.动态.直播.社交等功能于一身. 前端功能说明: 登入注册:手机验证码登入.编辑个人信息.上传头像 首页直播:查看主播用户. ...

  3. 移动安全--7--JVM / Dalvik / ART虚拟机

    7-1.关于Dalvik和ART虚拟机 1.Android4.4之前的Android运行时是Dalvik虚拟机.它使用即时编译. 2.Android4.4中引入了ART虚拟机,但默认的Android运 ...

  4. Dalvik/ART(ANDROID)中的多线程机制(4)

    在java中创建一个线程, new Thread对象, 并调用它的start()方法, 这是每一个java程序员都知道的事.在linux C中创建一个线程, 使用pthread_create(& ...

  5. android 源码中的单例,Android源码中的一种单例实现

    单例模式的实现方式有懒汉,饿汉,双重校验锁,枚举,内部类等等,写法就不全部列举了.Android源码中有一个单例辅助类/frameworks/base/core/java/android/util/S ...

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

    文章目录 一.线程栈 二.栈帧 三.栈帧 - 局部变量表 四.反汇编字节码文件 五.Java 虚拟机指令手册 六.程序计数器 一.线程栈 装载 HelloWorld.class 字节码文件到 Java ...

  7. Dalvik/ART(ANDROID)中的多线程机制(3)

    封装任务 Message 在整个消息处理机制中,message又叫task,封装了任务携带的信息和处理该任务的handler.message的用法比较简单,这里不做总结了.但是有这么几点需要注意(待补 ...

  8. Dalvik/ART(ANDROID)中的多线程机制(2)

    Android消息处理机制(二) 角色综述(回顾): (1)UI thread通常就是main thread,而Android启动程序时会替它建立一个MessageQueue. (2)当然需要一个Lo ...

  9. eclipse查看android源码包(eclipse导入android源码包)

    以前会,后来好长时间不稿,忘了,还是记下来: 下载对应版本的源码包比如:android-2.3-src.rar,android-2.3.3-src.rar, 下载完后,在对应版本的platforms里 ...

最新文章

  1. CNVD初次获取的源代码格式
  2. 14PS中的切图基本操作
  3. 开始启动OPNsense的汉化工作
  4. java reflection list_Java Reflection(九):泛型
  5. 关于querySelector 和 document.getElementsByTagName 选中集合问题
  6. Qt中修改应用程序和标题栏的图标
  7. MySQL—用户和权限管控
  8. 啥?不用安装Jre,SpringBoot项目也可以打包exe应用程序运行!
  9. hibernate中java类的成员变量类型如何映射到SQL中的数据类型变化
  10. Oracle正版用户授权
  11. Illustrator CS4 序列号
  12. ELK抓取AWS-ELB日志的logstash配置文件
  13. 胶片效果滤镜渲染工具:DxO FilmPack Mac
  14. 帝国理工大学计算机本科笔试题,共同努力 成功申请帝国理工学院计算机科学专业...
  15. 东南大学计算机学院学办董烨,东南大学计算机教学实验中心(国家级)
  16. Not Shading英语翻译
  17. 微型计算机原理实验二,微机原理实验2
  18. c++实现北京地铁线路查询系统
  19. 北大计算机考研个人陈述,北大推免研究生个人陈述
  20. Gephi简易学习[五]———— 分析红楼梦数据,了解Gephi操作流程

热门文章

  1. 【python】关于控制台的中文输出出现\x形式的问题 python常用包与如何安装
  2. 2018-12-10
  3. iOS:给标签栏控制器的UITabbarItem添加点击动效
  4. hadoop部署单机
  5. [福大软工] W班 总成绩排行榜
  6. Sql sever 分组排序
  7. CodeForces - 755C PolandBall and Forest (并查集)
  8. shareSDK 微信分享的时候只能分享jpg格式的图片大于32k时为什么分享不出去?
  9. FlatBuffers初探
  10. YII 测试环境搭建