基于AOP的方法级自动埋点

什么是埋点

埋点(打点)其实就是操作的记录,又细分为本地和在线两种,前者记录在log里供开发分析问题用,后者则直接上传到服务器,会被用到像是BI、PD分析业务趋势上。最常见的像是在activity的部分生命周期记录,或者点击操作的时候上报一下。

虽然其本身只是一两行代码的事,却会对客户端代码的整洁性产生影响,而且本身也不够灵活,需要在各个地方或者基类写代码,很难做一些特例。

AOP

AOP,面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。

看起来很牛逼的样子,其实简单来说,就是插代码(编译期或者运行期)。

AspectJ

也是个有十几年历史的库了。定义了各种连接点集合来实现AOP的概念,网上现在很多资料,这里就不赘述了。

Android Usage

在Gradle中使用:https://github.com/uPhyca/gradle-android-aspectj-plugin

生命周期切面定义

1
2
3
4
5
6
7
8
9
// 所有继承自android.app.Activity的类的以on开头的方法
@Pointcut("execution(* android.app.Activity+.on*(..)) && this(activity) ")
public void logForActivity(android.app.Activity activity) {
}
// 所有继承android.support.v4.app.Fragment的类的以on开头的方法
@Pointcut("execution(* android.support.v4.app.Fragment+.on*(..)) && this(fragment) ")
public void logForFragment(android.support.v4.app.Fragment fragment) {
}
Mark Zhai (翟一帆) wechat
欢迎您扫一扫上面的微信公众号,订阅我们的公众号!
坚持原创技术分享,您的支持将鼓励我继续创作!