推荐书籍《Android全埋点解决方案》 作者:王灼洲
推荐序:为了实现对数据的采集,可以使用三种方式:代码埋点、工具导入和全埋点。这三种方式都是手段,并且各有优缺点,选择需要完全基于实际的业务需求和现状来设计。埋点方式多种多样,按照埋点位置不同,可以分为前端(客户端)埋点与后端(服务器端)埋点。其中全埋点是目前较为留下的前端埋点方式之一。全埋点采用“全部采集,按需选取”的形式,对页面中所有交互元素的用户行为进行采集,通过界面配置来决定哪些数据需要进行分析。
第一章:全埋点,也叫雾霾点、无码埋点、无痕埋点、自动埋点。全埋点是指无需Android应用程序开发工程师写代码或者只写少量代码,就能预先自动收集用户的素有行为数据,然后就可以根据实际的业务分析需求从中筛选出所需行为数据并进行分析。
全埋点采集的时间目前主要包括以下四种,(事件名称前面$符号),是指该事件是预置事件,与之对应的自定义事件:
$AppStart事件 指应用程序启动,同时包括冷启动和热启动场景。热启动也就是应用程序从后台恢复的情况。
$AppEnd事件 是指应用程序退出,包括应用程序的正常退出、按Home键进入后台、应用程序被强杀、应用程序崩溃等场景。
$AppViewScreen事件 是指应用程序页面浏览,对于Android应用程序来说,就是指切换Activity或Fragement。
$AppClick事件 是指应用程序控件点击,也即View被点击,比如点击Button、ListView等。在采集的这四种事件当中,最重要并且采集难度最大的是$AppClick事件。所以全埋点的解决方案基本上也都是围绕着如何采集$AppClick事件来进行的。
对于$AppClick事件的全埋点整体解决思路,归根到底,就是要自动找到那个被点击的控件处理逻辑,然后再利用一定的技术原理,对原处理逻辑进行“拦截”,或者在原处理逻辑的执行前面或执行者后面“插入”相应的埋点代码逻辑,从而达到自动埋点的效果。
选择全埋点的解决方案,需要从效率、兼容性、拓展性等方面进行综合考虑:
1、效率 利用某些技术对某些方法(控件被点击时的处理逻辑)进行拦截(或者叫代理)或者“插入”相关埋点代码:
- 静态代理
通过Gradle Plugin在应用程序变异期间“插入”代码或者修改代码(.class文件)。比如AspectJ、ASM、Javassist、AST等方案均属于这种方式。
- 动态代理
在代码运行时候(Runtime)取进行代理。比如我们比较场景的代理:View.OnClickListener、Window.Callback\View.AccessibilityDelegate 等方案均属于这种方式。从总体上来说,静态代理明星由于动态代理。
2、兼容性
3、拓展性