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