Android Aop

OOP如果是把问题划分到单个模块的话
AOP就是把涉及到众多模块的某一类问题进行统一管理。

Android AOP就是通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。

利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,提高开发效率。

AOP

AOP技术常用在以下方面:
1、日志记录:业务埋点
2、持久化
3、性能监控:性能日志
4、数据校验:方法的参数校验
5、缓存:内存缓存和持久缓存
6、权限检查:业务权限(如登陆,或用户等级)、系统权限(如拍照定位)
7、异常处理

App 的编译和打包流程

App 的编译和打包流程

解密 JVM 字节码

解密 JVM 字节码

APT

代表框架:DataBinding,Dagger2, ButterKnife, EventBus3 、DBFlow、AndroidAnnotation

AspectJ

AspectJ除了hook之外,AspectJ还可以为目标类添加变量,接口。另外,AspectJ也有抽象,继承等各种更高级的玩法。它能够在编译期间直接修改源代码生成class,强大的团战切入功能,指哪打哪,鞭辟入里。有了此神器,编程亦如庖丁解牛,游刃而有余。
AspectJ

Javassist

首先我们得知道什么时候编译完成,并且我们要赶在class文件被转化为dex文件之前去修改。在Transfrom这个api出来之前,想要在项目被打包成dex之前对class进行操作,必须自定义一个Task,然后插入到predex或者dex之前,在自定义的Task中可以使用javassist或者asm对class进行操作。而Transform则更为方便,Transfrom会有他自己的执行时机,不需要我们插入到某个Task前面。Tranfrom一经注册便会自动添加到Task执行序列中,并且正好是项目被打包成dex之前。

asm

深入探索编译插桩技术ASM

动态代理

参考

【深度】安卓AOP三剑客:APT,AspectJ,Javassist

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 本章节更新的慢了些,最近公司多事之秋,今天静下心来把AOP最后入门篇补上,做事还要有头和尾的。 Javass...
    Code猎人阅读 5,152评论 0 17
  • title: Android AOP之字节码插桩author: 陶超description: 实现数据收集SDK时...
    陶菜菜阅读 38,249评论 40 182
  • 1. AOP简介   大家都知道OOP(面向对象编程),而AOP(Aspect Oriented Programm...
    sampsonlu阅读 396评论 0 1
  • AOP的基本概念 先来看看百度百科对AOP的解释 在软件业,AOP为Aspect Oriented Program...
    唠嗑008阅读 3,294评论 8 7
  • 如需转载请评论或简信,并注明出处,未经允许不得转载 目录 前言 AOP的中文解释是面向切面编程,是一种编程范式 面...
    Geekholt阅读 6,418评论 1 21