【字节码插桩】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 编译时技术进行开发的 ;


目录
相关文章
|
12天前
|
Java 数据库 Android开发
【专栏】Kotlin在Android开发中的多线程优化,包括线程池、协程的使用,任务分解、避免阻塞操作以及资源管理
【4月更文挑战第27天】本文探讨了Kotlin在Android开发中的多线程优化,包括线程池、协程的使用,任务分解、避免阻塞操作以及资源管理。通过案例分析展示了网络请求、图像处理和数据库操作的优化实践。同时,文章指出并发编程的挑战,如性能评估、调试及兼容性问题,并强调了多线程优化对提升应用性能的重要性。开发者应持续学习和探索新的优化策略,以适应移动应用市场的竞争需求。
|
12天前
|
Java Android开发
Android系统 获取用户最后操作时间回调实现和原理分析
Android系统 获取用户最后操作时间回调实现和原理分析
31 0
|
12天前
|
Java 关系型数据库 MySQL
利用Spring AOP技术实现一个读写分离
利用Spring AOP技术实现一个读写分离
35 0
|
12天前
|
Java 数据库连接 应用服务中间件
Spring5源码(39)-Aop事物管理简介及编程式事物实现
Spring5源码(39)-Aop事物管理简介及编程式事物实现
27 0
|
12天前
|
Linux Android开发
测试程序之提供ioctl函数应用操作GPIO适用于Linux/Android
测试程序之提供ioctl函数应用操作GPIO适用于Linux/Android
18 0
|
12天前
|
XML 监控 安全
Spring特性之一——AOP面向切面编程
Spring特性之一——AOP面向切面编程
21 1
|
2天前
|
Java 开发者 Spring
面向切面编程(SpringAOP)、通过注解实现AOP代码、AOP的工作流程
面向切面编程(SpringAOP)、通过注解实现AOP代码、AOP的工作流程
11 1
面向切面编程(SpringAOP)、通过注解实现AOP代码、AOP的工作流程
|
11天前
|
前端开发 Java 开发者
【JavaEE】面向切面编程AOP是什么-Spring AOP框架的基本使用
【JavaEE】面向切面编程AOP是什么-Spring AOP框架的基本使用
18 0
|
12天前
|
XML Java API
Android 浅度解析:系统框架层修改,编译,推送相关操作
Android 浅度解析:系统框架层修改,编译,推送相关操作
37 0
|
12天前
|
Java Spring
代码优雅的转变:基于注解的AOP编程在Spring中的实践
代码优雅的转变:基于注解的AOP编程在Spring中的实践
20 0