Android-全自动埋点方法论-下

前面提到了全自动埋点的范围和方法,这个章节主要记录一下关于点击事件采集的相关方法论。

Android开发基础知识

需要先说明几个基础的知识,这样对于无码采集的方法论理解就更清晰,这也是做一个事情分析的逻辑。

  • Adnroid开发基于java代码(常规)
    Android的基础语言是java语言,java语言的开发流程包括
    java代码-class文件-运行
  • Android安装包apk构建打包
    是将上述class代码通过gradle构建打包成dex文件,然后签名输出成apk

Android事件机制

每一个应用有一个Application,每一个Application有多个Activity,一个Activity下有一个PhoneWindow,一个PhoneWindow下有DecorView,一个DecorView下的content就是我们开发的展示给用户的界面。一个界面由ViewGroup和View组成。借用一张经典的图:


image.png

我们设置的点击事件是在ViewGroup/View上设置类似setOnClicklistener来实现。
Android的事件分发机制简单来说会从Activity自上而下分发,然后看中间是否有消费的,具体不细说了。

采集方法一 - AOP技术

通过上述Android开发基础知识,我们应该就能想到这个方法,本身用户行为采集也是从切面去处理的,所以AOP技术的应用就自然而然了。
我们从构建流程往下分析,看一看AOP都有几种方式实现:

  • APT - 注解处理器
    先来一个简单的,我们在开发中经常遇到APT技术的使用,比如路由框架、EventBus等等。
    APT的具体使用就不过多描述了,主要说下这里面的实现原理:
    就是通过APT后,我们在处理器中可以拿到代码的抽象语法树(AST),这个又是一个技术点,然后通过操作语法树上的元素进行源码的修改,从而修改view的setOnClicklistener相关代码,插入我们的逻辑。
  • AspectJ、Javassist
    这两个也不难想到,本身就是对class文件的处理,通过这两个技术我们可以在代码编译的过程中修改class文件,同样找到目标view的方法,插入我们的采集代码,从而达到采集的目的。
  • ASM
    这个和上面两个类似,不过是Android常用的,通过使用Transform需要开发一个自定义的gradle plugin,然后再通过官方提供的相应工具来实现对于class文件的修改和编织。这个也常用在一些诸如采集App网络请求数据等一些实现上。
    上述技术手段理解上难度不大,比较费时的是在具体代码拦截和替换注入上面,这个需要花费一定的功夫去研究里面的逻辑和处理方式,还要掌握一定的字节码相关知识。这个掌握之后以后对于一些自动化生成代码都比较有用。

采集方法二 - 代理

这个方法在我们分析Android屏幕组成和事件分发机制那块可以想到的,既然可以通过一系列方法获取到窗口的各个对象(Activity、PhoneWindow、View),加上事件的分发机制,所以我们可以罗列一下相应的采集手段。

  • Window.Callback
    我们通过代码分析,发现window对象下面可是设置Callback,实现接口之后有一个dispatchTouchEvent的回调方法,那我们通过代理这个接口(可能用到反射相关的技术),这样就可以获取到的用户当前点击的坐标,在通过对于ViewGroup和view的遍历,就可以查出来当前点击在哪一个view上。
  • 透明层遮罩
    通过上面的分析,我们获取到用户点击的位置就可以获取到对应点击的view,那是不是可以设置一个全屏透明的View插入在DecorView下面,这样是不是就可以实现获取用户点击行为。
  • 代理View.onClickListener
    既然我能遍历到具体的view,那我就可以通过反射等技术手段获取到View的onClickListener事件,通过代理包装这个事件,就达到了采集用户行为的目的。
  • View.mAccessibilityDelegate
    通过代理思路,我们又可以发现在开发一些辅助模式时可以在View上设置mAccessibilityDelegate,这个样子View被触摸之后就可以通过接口回调通知我们,也就能够采集到的用户点击的行为数据。
    上面就是用户点击行为数据的采集方法论,有了方法论我们也需要分析一下对应的优缺点,做到心里有数。

无码采集方法对比

  • AOP
    缺点:
    1、有一些AOP方法不能处理第三方库,比如APT技术
    2、技术门槛有些高,后期改动维护需要高人支持
    3、这会增加编译时长
    有点:
    1、当然增加的是编译时长,不是运行打开时长,影响力度可接受哈。
    2、通用的技术,如果是java语言开发,兼容性小一些。
  • 代理
    缺点:
    1、运行时代理,用到反射,会增加性能损耗。
    2、反射就存在不同版本对应的对象或者API不一样,有兼容问题。
    3、一些游离态的控件采集不到,因为主要是采用Application中监听Activity生命周期方式,有一些对话框、popwindow等无法监听到弹出,所以可能采集不到游离态控件(当然最终还是有办法去解决的,有机会再单独介绍这部分)。
    优点:
    1、其实就是简单,容易理解,从0搞一个难度不大(其实还需要考虑数据上报、数据缓存、异步线程采集等具体问题,所以从0搞一个还是需要些时间的)

其他问题

前面也提到了,全自动埋点数据量比较到,会采集很多数据,所以怎么样减少无效数据的采集也是摆在全自动采集方案中需要解决的一个问题。
同时还有另一个问题,全自动采集本身和业务关联不大,那么就需要通过技术手段为每一个元素view设置一个唯一的标识,而通过技术手段生成的唯一标识在业务人员看起来肯定无法理解(采集数据最终是给到业务人员使用的),所以这就是第二个需要解决的问题。
上面这两个问题有技术手段一并解决,业内通常的叫法就叫做圈选埋点,通过可视化全选的方式控制那些界面采集,那些界面不采集,以及可以给界面和元素生成业务可以理解的映射字段,这个样子也就让全埋点具体操作权放到业务运营人员手里了,由他们自行来处理。这方面的技术手段以及上述游离态控件的采集有时间再做统一的介绍。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容