关于对Android自动埋点的学习

本文介绍了自动埋点技术,探讨了其应用场景,如用户数据上报,并详细解释了使用XPath进行View唯一标识的方法及其优缺点。此外,还讨论了事件拦截和业务数据搜集的技术方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景

自动化埋点是相比较与手动插桩手动埋点之后提出的更加低侵入的方法。

自动埋点的应用场景

用户数据上报。根据业务需求,通过下发配置进行进行埋点收集
数据搜集的内容.
一种是应用的事件:
事件数据上报
一种是app的业务数据以及其他数据。

View 唯一标识

标识的目的

应用的视图需要对页面中的view 进行唯一标识。标识的目的是让view在页面上具有区分性和一致性。

  • 区分性: 让view 在视图上与其他的view 进行区分
  • 一致性: 在同一个页面 view的标识唯一,无论应用环境、多次进入同一个页面

解决方案xpath

XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言。
XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力。起初XPath的提出的初衷是将其作为一个通用的、介于XPointer与XSL间的语法模型。但是XPath很快的被开发者采用来当作小型查询语言。

xpath原理

Android中xpath路径:
在这里插入图片描述
IOS中xpath路径:
在这里插入图片描述
web页面中的xpath表示路径: /html/body/div[4]/div/div[2]/span

xpath实现

通过view获取xpath和在UIAutomator定位Android控件Xpath路径

可以定义xpath的表示: 页面/+ viewPath/ + 其他匹配规则/
view在viewTree中的相对位置
可以通过View的父亲节点和与兄弟节点的相对位置获取 视图View的viewPath路径

xpath优缺点及解决方案

优点
  • 埋点的自动化可新增
  • 对代码非侵入
  • xpath表示语法支持IOS、Android、Web等多端
缺点
  • 对于动态化的界面,如果ViewTree中的节点被新增和删除会导致viewPath改变
  • xath的语言较复杂
优化解决方案

对于列表类型的确定子视图在父中的位置还可以通过Position来定位
可以添加页面信息+空间Tag/Id来更准确的定位

事件拦截

事件拦截是指应用发生的各种事件进行拦截处理。

事件拦截的目标

拦截处理的事件包括应用的启动、前后台、页面的显隐、最主要的是页面上的点击事件以及条目的浏览。
拦截事件后将有效的业务数据进行上报来进行app分析(bug分析、页面优化)、用户分析(推荐、行为预测)

事件拦截的方式

拦截的方式主要是AOP思想:
在Android开发过程中,我们经常会在我们的具体业务代码中加入全局性、系统性的与具体业务无关的代码。比如埋点、动态申请权限等等。AOP的思想就是将这些与业务无关的系统性的功能解耦出来,让代码看起来更清晰一点。

代理监听

代理监听这里指的是手动插桩,一般手动插桩无法全方位覆盖,对代码造成侵入。

编译期插桩

编译期插桩提供的实现技术有很多:

  • 静态代理 和 运行期注解 + 动态代理
  • 编译时代码生成(APT),案例:ButterKnife,Dagger2,Room
  • 切面编程库(AspectJ),案例:Hugo
  • 字节码注入(ASM),案例:GrowingIO(无埋点上报框架)
    其中ASM插桩方案的侵入最小

业务数据搜集

业务数据收集是最终要实现的目标

方案 OnClick事件数据搜集

一般的业务数据收集是在用户的点击事件后,在点击事件通常是监听过程,我们可以在关联的onClick监听中获取其中引用到的数据
问题转化成了:如何在OnClick中获取需要的引用数据

实现在内部类中找到自己想要的数据

因为监听事件以内部类的形式进行注入。在内部类使用外部数据的时候会在内部类实现中引用这个数据。问题再次转化为实现内部类的实现类的成员变量。
成员变量搜集

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值