【字节码插桩】Android 打包流程 | Android 中的字节码操作方式 | AOP 面向切面编程 | APT 编译时技术
文章目錄
- 一、Android 中的 Java 源碼打包流程
- 1、Java 源碼打包流程
- 2、字符串常量池
- 二、Android 中的字節碼操作方式
一、Android 中的 Java 源碼打包流程
Java 程序在 Java 虛擬機執行前 , 需要先將 Java 源碼通過 javac 編譯成 .class 字節碼文件 , 然后才能在虛擬機中運行 ;
1、Java 源碼打包流程
Android 中的 Java 源碼打包流程 : 參考 【Android 安裝包優化】APK 打包流程 ( 文件結構 | 打包流程 | 安裝流程 | 安卓虛擬機 ) 博客 ;
① 編譯資源 R.java 源碼 : 使用 AAPT 工具打包資源文件 , 生成 R.java , resources.ap 文件 ;
② 編譯 AIDL 接口源碼 : 使用 AIDL tool 工具 , 處理 AIDL 文件 , 生成對應的 Java 文件 ;
③ 編譯 Java 源碼 : 使用 javac 工具編譯 Java 源碼為 class 字節碼文件 ;
④ 打包 Class 字節碼 : 使用 dx 工具將 class 字節碼文件打包成 dex 字節碼文件 , 這是 Dalvik 虛擬機字節碼文件 ;
⑤ 生成未簽名 APK : 使用 apkbuilder 工具生成未簽名的 apk 文件 ;
⑥ 簽名 : 使用 jarsigner 工具對 apk 文件進行簽名 , 生成簽名后的文件 ;
⑦ 對齊 : 使用 zipalign 工具對簽名后的 apk 文件進行對齊操作 ;
2、字符串常量池
XML 文件在編譯時 , 會被編譯成二進制文件 , 二進制文件比 XML 文件占用的空間更小 , 所有在 XML 文件出現過的字符 , 都會放入字符資源池 , 可以去重復 ;
通過 resources.arsc 文件中的資源字符串的 字符串內容 偏移量 , 確定有哪些字符 ;
二、Android 中的字節碼操作方式
操作字節碼的 222 種方式 :
- AOP : Aspect Oriented Programming , 面向切面編程 ;
- APT : 編譯時技術 , 注解 , 注解處理器 , Android 依賴庫 , 333 件套 ; 參考 Android APT 專欄 ;
AOP 和 APT 都可以用于字節碼插樁操作 :
- AOP 的插樁時機是 .class 字節碼文件打包為 .dex 文件過程中 ;
- APT 的插樁時機是 .java 文件編譯成 .class 字節碼文件時 , 進行的 , 編譯時進行字節碼插樁 ;
ButterKnife , Dragger2 , GreenDao , ARoute 都是基于 APT 編譯時技術進行開發的 ;
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀
總結
以上是生活随笔為你收集整理的【字节码插桩】Android 打包流程 | Android 中的字节码操作方式 | AOP 面向切面编程 | APT 编译时技术的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Java 虚拟机原理】Dalvik 虚
- 下一篇: 【字节码插桩】AOP 技术 ( “字节码