编译插桩技术的分类与应用场景

2020-12-06  本文已影响0人  凯玲之恋

编译插桩技术具体可以分为两类,如下所示:

1)、APT(Annotation Process Tools) :用于生成 Java 代码。
2)、AOP(Aspect Oriented Programming):用于操作字节码。

1、APT(Annotation Process Tools)

总所周知,ButterKnife、Dagger、GreenDao、Protocol Buffers 这些常用的注解生成框架都会在编译过程中生成代码。
而 使用 AndroidAnnotation 结合 APT 技术 来生成代码的时机,是在编译最开始的时候介入的

使用 APT 技术生成 Java 代码的方式具有如下 两方面 的优势:

2、AOP(Aspect Oriented Programming)

AOP 是在编译完成后生成 dex 文件之前的时候,直接通过修改 .class 文件的方式,来直接添加或者修改代码逻辑的。

而对于操作字节码的方式来说,一般都在 代码监控、代码修改、代码分析 这三个场景有着很广泛的应用。

相对于 Java 代码生成的方式,操作字节码的方式有如下 特点:

此外,我们不仅可以操作 .class 文件的 Java 字节码,也可以操作 .dex 文件的 Dalvik 字节码

1、代码监控

编译插桩技术除了 不能够实现耗电监控,它能够实现各式各样的性能监控,例如:网络数据监控、耗时方法监控、大图监控、线程监控 等等。

譬如 网络数据监控 的实现,就是在 网络层通过 hook 网络库方法 和 自动化注入拦截器的形式,实现网络请求的全过程监控,包括获取握手时长,首包时间,DNS 耗时,网络耗时等各个网络阶段的信息

实现了对网络请求过程的监控之后,我们便可以 对整个网络过程的数据表现进行详细地分析,找到网络层面性能的问题点,并做出针对性地优化措施。例如针对于 网络错误率偏高 的问题,我们可以采取以下几方面的措施,如下所示:

2、代码修改

用编译插桩技术来实现代码修改的场景非常之多,而使用最为频繁的场景具体可细分为为如下四种:

3、代码分析

例如 Findbugs 等三方的代码检查工具里面的 自定义代码检查 也使用了编译插桩技术,利用它我们可以找出 不合理的 Hanlder 使用、new Thread 调用、敏感权限调用 等等一系列编码问题。

参考

[深入探索编译插桩技术(二、AspectJ)]https://juejin.cn/post/6844904112396615688)

上一篇 下一篇

猜你喜欢

热点阅读