读书笔记- Android全埋点解决方案

读书笔记- Android全埋点解决方案

就是这本书

看完了 《Android 全埋点解决方案》,一句话总结:
就是如何利用Android 系统提供的能力,在尽量不侵入原有业务逻辑的前提下,实现全场景埋点。即实现埋点和业务的解耦。


1.前三章总结

第一章:
全埋点:指无须开发工程师写代码或只写少量的代码,就能预先自动收集用户的行为数据。
全埋点的事件类型:包含: $AppStart, $AppEnd, $AppViewScreen, $ AppClick
View绑定Listener方式:1.setOnClickListener. 2.android:onClick=. 3.@OnClick注解 4.DataBinding绑定listener


第二章:$AppViewScreen
Application.ActivityLifecycleCallbacks (API 14+)
可以对Activity的所有生命周期事件进行集中处理(监听)
可以在 onActivityResumed()方法中增加页面曝光的埋点。需要注意,如果当前页面弹出了申请权限的弹框,再回到当前页面是会重新走onResume的,可以通过 ignoreAutoTrackActivity方法添加忽略页面。


第三章: $AppStart , $AppEnd
注册 application.registerActivityLifecycleCallbacks, 在onActivityStarted触发 $AppStart,onActivityPaused 触发计时器。

2.后八章总结

后八章讲的是点击事件的埋点方案,是业务中非常重要的埋点部分。
点击事件埋点


方案一:
注册 Application.ActivityLifecycleCallbacks,在onActivityResumed中拿到 R.id.content整个内容区域对应的VIEW (FrameLayout),遍历 RootView,反射拿到当前View的mOnclickListener,设置自定义的代理 WrapperOnClickListener,里面调用原Listener的逻辑,再加上埋点逻辑。


方案二:
Window.Callback
注册回调,在 onActivityCreated 中,activity.getWindow()拿到 Window,调用 window.getCallback(), 代理 Window.Callbakc中的 dispatchTouchEvent, 通过 MotionEvent 参数找到被点击的View, 插入埋点逻辑;再调用原有 Window.Callback的 dispatchTouchEvent方法。


方案三-五


方案三:
代理 View.AccessibilityDelegate
在 onActivityResumed中,通过 activity.getWindow().getDecorView获取 RootView, 递归遍历 RootView, 代理 View的mAccessibilityDelegate, 判断 eventType 是否为 AccessibilityEvent.TYPE_VIEW_CLICKED.


方案四:
透明层
自定义 透明 View,添加到每个Activity最上层(在onActivityCreated回调中添加透明层),点击的就是透明View。
重写 View的 onTouchEvent,根据 MotionEvent的点击坐标(x, y),在当前Activity 的 RootView里找到实际被点击的View,代理该View的 mOnClickListener,插入埋点。


方案五:
AspectJ
面向切面,通过切点匹配,在目标方法执行后插入埋点代码。
AspectJ是对 AOP思想的实现。


方案6-8


方案六:
ASM
打包生成 .dex文件前,通过 Transform API 操作 .class 文件,遍历 .class 文件的方法,对 listener修改,替换原文件。
利用 ASM框架API,加载,解析 .class 文件,找到满足特定条件的 .class 文件和相关方法,修改方法插入埋点。


方案七:
Javassist
原理与 ASM类似,把操作 .class文件框架换为 Javassist.


方案八:
AST
编辑器对代码的大致处理流程是:
JavaTXT -> 词语法分析 -> 生成 AST -> 语义分析 -> 编译字节码
自定义注解处理器 process方法, AST框架 API遍历,找到目标方法,插入埋点逻辑。

猜你喜欢

转载自blog.csdn.net/adayabetter/article/details/122147834
今日推荐