【字节码插桩】Android 打包流程 | Android 中的字节码操作方式 | AOP 面向切面编程 | APT 编译时技术

简介: 【字节码插桩】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 文件进行对齐操作 ;


image.png



2、字符串常量池


XML 文件在编译时 , 会被编译成二进制文件 , 二进制文件比 XML 文件占用的空间更小 , 所有在 XML 文件出现过的字符 , 都会放入字符资源池 , 可以去重复 ;


通过 resources.arsc 文件中的资源字符串的 字符串内容 偏移量 , 确定有哪些字符 ;






二、Android 中的字节码操作方式


操作字节码的 2 22 种方式 :


AOP : Aspect Oriented Programming , 面向切面编程 ;

APT : 编译时技术 , 注解 , 注解处理器 , Android 依赖库 , 3 33 件套 ; 参考 Android APT 专栏 ;


AOP 和 APT 都可以用于字节码插桩操作 :


AOP 的插桩时机是 .class 字节码文件打包为 .dex 文件过程中 ;

APT 的插桩时机是 .java 文件编译成 .class 字节码文件时 , 进行的 , 编译时进行字节码插桩 ;


ButterKnife , Dragger2 , GreenDao , ARoute 都是基于 APT 编译时技术进行开发的 ;


目录
相关文章
|
4天前
|
Java Spring 容器
Spring AOP是如何实现面向切面编程的
Spring AOP是如何实现面向切面编程的
|
3天前
|
开发工具 Android开发 数据安全/隐私保护
探索iOS与安卓应用开发的异同:技术、工具和市场趋势
在移动操作系统的广阔舞台上,iOS和安卓两大主角各自演绎着怎样的精彩?本文将深入剖析这两大平台在应用开发过程中的技术差异、开发工具的选择以及面对的市场环境。通过数据支撑和案例分析,我们将一窥这两个系统如何影响开发者的决策,并探讨它们未来的发展方向。
|
6天前
|
存储 缓存 Java
Android性能优化:内存管理与LeakCanary技术详解
【7月更文挑战第21天】内存管理是Android性能优化的关键部分,而LeakCanary则是进行内存泄漏检测和修复的强大工具。
|
19天前
|
监控 安全 Java
Java中的AOP编程实践与应用场景
Java中的AOP编程实践与应用场景
|
23天前
|
机器学习/深度学习 人工智能 文字识别
文本,文字扫描01,OCR文本识别技术展示,一个安卓App,一个简单的设计,文字识别可以应用于人工智能,机器学习,车牌识别,身份证识别,银行卡识别,PaddleOCR+SpringBoot+Andr
文本,文字扫描01,OCR文本识别技术展示,一个安卓App,一个简单的设计,文字识别可以应用于人工智能,机器学习,车牌识别,身份证识别,银行卡识别,PaddleOCR+SpringBoot+Andr
|
18天前
|
安全 搜索推荐 Android开发
安卓与iOS的较量:技术深度与用户体验的博弈
在数字时代的浪潮中,安卓与iOS两大操作系统如同巨人般主宰着移动设备的生态。本文将深入探讨这两大系统在技术架构、安全性、应用生态和用户体验等方面的差异,并结合最新的市场数据和技术发展动态,为读者呈现一个全面而深入的分析视角。我们将看到,尽管安卓以其开放性和高度可定制性赢得了广泛的市场份额,iOS则以其卓越的用户体验和强大的品牌忠诚度构建了坚固的护城河。两者的竞争不仅推动了技术的快速进步,也不断塑造着我们对智能手机的期待和想象。
|
22天前
|
安全 Java C++
Java中的AOP编程详解
Java中的AOP编程详解
|
24天前
|
安全 Java C++
|
24天前
|
Java Spring
Spring AOP(面向切面编程)详解
Spring AOP(面向切面编程)详解
|
25天前
|
XML 监控 安全
Java中AOP编程的实际应用场景
Java中AOP编程的实际应用场景