无痕埋点在Android中的实现

无痕埋点在Android中的实现

目标

  1. 解决手动打点效率低下问题
  2. 自动化埋点

本篇技术实现主要是运行是代理,不涉及到插桩技术,不引入插件,对业务影响点最小

技术难点

1. 如何拦截到所有的view的点击事件

view有个setAccessibilityDelegate方法可以通过自定义一个全局的AccessibilityDelegate对象来监听view的点击事件

object EventTrackerAccessibilityDelegate : View.AccessibilityDelegate() {
   

    override fun sendAccessibilityEvent(host: View?, eventType: Int) {
   
        super.sendAccessibilityEvent(host, eventType)
        if (eventType == AccessibilityEvent.TYPE_VIEW_CLICKED) {
   
            host?.let {
   
                // 统一做埋点
            }
        }
    }
}

通过给每个View设置上述单例对象,这样每当View被点击时,View.performClick内部就会触发上述方法。这样就能够拦截view的点击事件,而不用修改业务层代码。

2. 如何对app所有的view设置setAccessibilityDelegate

解决这个问题,就得拦截到app中view的创建。我们先要对Android中View的创建流程需要明白,对于android中的view创建,我们先从AppCompatActivity.onCreate方法入手

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
   
  final AppCompatDelegate delegate = getDelegate();
  delegate.installViewFactory(); //重点
  delegate.onCreate(savedInstanceState);
  super.onCreate(savedInstanceState);
}

我们重点看installViewFactory方法,delegate返回的实际类型为AppCompatDelegateImpl,它继承了AppCompatDelegate抽象类

// AppCompatDelegateImpl.java
@Override
public void installViewFactory() {
   
  LayoutInflater layoutInflater = LayoutInflater.from(mContext);
  if (layoutInflater.getFactory() == null) {
   
    LayoutInflaterCompat.
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Android无痕埋点是一种在Android应用程序进行数据追踪的技术手段,不影响用户正常操作的同时,对用户行为进行统计和分析。 在传统的数据追踪方式,开发人员通常需要手动在代码添加埋点代码,这会增加代码的复杂性并且容易出错。而无痕埋点则通过修改应用程序的底层框架来实现自动追踪用户行为,无需手动插入埋点代码。 Android无痕埋点的原理是通过动态代理或Hook技术,拦截和修改应用程序的底层事件,如Activity生命周期、点击事件等,并将这些事件传递给埋点系统进行统计和分析。 该技术的优点在于,无痕埋点不会对用户体验造成影响,用户无感知地进行数据追踪。同时,由于无痕埋点是自动化的,开发人员不需要手动添加埋点代码,大大减少了开发和维护工作量。 然而,无痕埋点也存在一些限制和挑战。首先,为了实现无痕埋点,开发人员需要对Android底层框架有一定的了解。其次,由于对底层事件进行拦截和修改,无痕埋点可能会对应用程序的性能产生一定的影响,特别是在处理大量用户事件时。 总的来说,Android无痕埋点是一种实现数据追踪和分析的有效方法,通过自动化和无感知的方式,提供了更便捷和高效的数据采集方式。但同时也需要权衡好数据采集与用户体验之间的平衡,避免对应用程序性能和用户操作造成不必要的影响。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值