【Java 虚拟机原理】动态字节码技术 | Dalvik ART 虚拟机 | Android 字节码打包过程
生活随笔
收集整理的這篇文章主要介紹了
【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 字节码打包过程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Java 虚拟机原理】Class 字节
- 下一篇: 【Java 虚拟机原理】Android