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


目录
相关文章
|
9月前
|
存储 消息中间件 人工智能
【03】AI辅助编程完整的安卓二次商业实战-本地构建运行并且调试-二次开发改注册登陆按钮颜色以及整体资源结构熟悉-优雅草伊凡
【03】AI辅助编程完整的安卓二次商业实战-本地构建运行并且调试-二次开发改注册登陆按钮颜色以及整体资源结构熟悉-优雅草伊凡
278 3
|
9月前
|
存储 消息中间件 人工智能
【05】AI辅助编程完整的安卓二次商业实战-消息页面媒体对象(Media Object)布局实战调整-按钮样式调整实践-优雅草伊凡
【05】AI辅助编程完整的安卓二次商业实战-消息页面媒体对象(Media Object)布局实战调整-按钮样式调整实践-优雅草伊凡
258 11
【05】AI辅助编程完整的安卓二次商业实战-消息页面媒体对象(Media Object)布局实战调整-按钮样式调整实践-优雅草伊凡
|
9月前
|
存储 消息中间件 人工智能
【08】AI辅助编程完整的安卓二次商业实战-修改消息聊天框背景色-触发聊天让程序异常终止bug牵涉更多聊天消息发送优化处理-优雅草卓伊凡
【08】AI辅助编程完整的安卓二次商业实战-修改消息聊天框背景色-触发聊天让程序异常终止bug牵涉更多聊天消息发送优化处理-优雅草卓伊凡
577 10
【08】AI辅助编程完整的安卓二次商业实战-修改消息聊天框背景色-触发聊天让程序异常终止bug牵涉更多聊天消息发送优化处理-优雅草卓伊凡
|
8月前
|
XML Java 数据格式
《深入理解Spring》:AOP面向切面编程深度解析
Spring AOP通过代理模式实现面向切面编程,将日志、事务等横切关注点与业务逻辑分离。支持注解、XML和编程式配置,提供五种通知类型及丰富切点表达式,助力构建高内聚、低耦合的可维护系统。
|
9月前
|
存储 消息中间件 人工智能
【04】AI辅助编程完整的安卓二次商业实战-寻找修改替换新UI首页图标-菜单图标-消息列表图标-优雅草伊凡
【04】AI辅助编程完整的安卓二次商业实战-寻找修改替换新UI首页图标-菜单图标-消息列表图标-优雅草伊凡
541 4
|
9月前
|
XML 存储 Java
【06】AI辅助编程完整的安卓二次商业实战-背景布局变更增加背景-二开发现页面跳转逻辑-替换剩余图标-优雅草卓伊凡
【06】AI辅助编程完整的安卓二次商业实战-背景布局变更增加背景-二开发现页面跳转逻辑-替换剩余图标-优雅草卓伊凡
223 3
【06】AI辅助编程完整的安卓二次商业实战-背景布局变更增加背景-二开发现页面跳转逻辑-替换剩余图标-优雅草卓伊凡
|
人工智能 监控 Java
面向切面编程(AOP)介绍--这是我见过最易理解的文章
这是我见过的最容易理解的文章,由浅入深介绍AOP面向切面编程,用科普版和专家版分别解说,有概念,有代码,有总结。
|
安全 Java 编译器
什么是AOP面向切面编程?怎么简单理解?
本文介绍了面向切面编程(AOP)的基本概念和原理,解释了如何通过分离横切关注点(如日志、事务管理等)来增强代码的模块化和可维护性。AOP的核心概念包括切面、连接点、切入点、通知和织入。文章还提供了一个使用Spring AOP的简单示例,展示了如何定义和应用切面。
1776 1
什么是AOP面向切面编程?怎么简单理解?
|
API Android开发 iOS开发
深入探索Android与iOS的多线程编程差异
在移动应用开发领域,多线程编程是提高应用性能和响应性的关键。本文将对比分析Android和iOS两大平台在多线程处理上的不同实现机制,探讨它们各自的优势与局限性,并通过实例展示如何在这两个平台上进行有效的多线程编程。通过深入了解这些差异,开发者可以更好地选择适合自己项目需求的技术和策略,从而优化应用的性能和用户体验。
|
XML Java 开发者
论面向方面的编程技术及其应用(AOP)
【11月更文挑战第2天】随着软件系统的规模和复杂度不断增加,传统的面向过程编程和面向对象编程(OOP)在应对横切关注点(如日志记录、事务管理、安全性检查等)时显得力不从心。面向方面的编程(Aspect-Oriented Programming,简称AOP)作为一种新的编程范式,通过将横切关注点与业务逻辑分离,提高了代码的可维护性、可重用性和可读性。本文首先概述了AOP的基本概念和技术原理,然后结合一个实际项目,详细阐述了在项目实践中使用AOP技术开发的具体步骤,最后分析了使用AOP的原因、开发过程中存在的问题及所使用的技术带来的实际应用效果。
431 5