《Android全埋点解决方案》
Android全埋点解决方案
王灼洲 著
Foreword 推荐序
到目前为止,中国的信息化建设大致经历了两个阶段。2015年之前,IT系统的引入主要是为了提升业务运营的效率,形成一套人与IT组件构成的业务系统,在纯线上产品中,只有IT组件构成的业务系统。在IT化的过程中,产生了数据这一副产品,通过数据可以进行一些基础的统计和分析工作。2015年之后,大数据的概念深入人心,大数据的场景逐步落地,之前的数据生成思路需要进行革新,不能只把数据当成副产品来看待,而是要考虑面向数据流的思路,IT系统只是数据生成的载体。
这就要求我们在IT系统建设时,不能只是为了完成业务功能,还要考虑如何进行有效的数据采集,对工程师的技能要求发生了变化,不仅要会写代码实现功能,还要建立数据思维。
我2007年加入百度,2015年离开,这八年的时间我主要做了一件事情,就是从零构建百度的用户行为数据平台,这其中走了不少弯路,也实现了不少价值。最深刻的一点体会就是:数据这件事情要做好,最重要的是数据源。只要数据源头解决好了,后面的分析处理都比较好办。那怎么才叫把数据源解决好呢?我也总结了四个字:大、全、细、时。大是指宏观上,当然也有物理层面的含义;全就是指要把多种数据源都采集下来,是全量而非抽样;细强调多维度,维度越多,越能精细化分析;时就是时效性,数据采集和查询分析都需要尽可能地实时。
为了实现对数据的采集,可以有三种方式:代码埋点、工具导入和全埋点。这三种方式都是手段,并且各有优缺点,选择时需要完全基于实际的业务需求和现状来设计,而不能一味地追求某一种方式,如果把全埋点当成必杀技,那就大错特错了。
灼洲作为神策数据的 iOS 和 Android SDK开发负责人,这两年多来对相关的技术进行了深入的研究和大量实践。特别是得益于 Android 系统的开放性,使数据的自动收集更为容易。由于自动收集的本质是对所有操作进行拦截,相比于代码埋点只是采集的一部分必要操作,显然利用自动收集的方式收集的操作类型更全面,因此我们将它命名为全埋点,而不是无埋点。
当然,虽然这种方式是自动化的,但有一些精细化的维度,以及后端的数据,无法用这种方式来实现。但如果想要及时地看到一些产品的宏观指标,又不想要工程师做太多的配合,这是一种很好的方式。
神策数据志在推动国内企业数据化的建设进程。因此,我们将探索和实践的成果全部贡献出来,供各位开发者学习,期待更多的人能够认识到数据的重要性,以及学会数据采集的具体方法。
桑文锋
神策数据创始人&CEO
Preface 前 言
为什么要写这本书?
转眼间,我从事Android研发工作已经有9个年头,作为国内第一批Android研发工作者,我见证了Android的发展历程,也开发和维护着国内第一个商用的开源Android & iOS 数据埋点SDK。
我目前就职于神策数据,担任神策数据合肥研发中心负责人。神策数据是一家以重构中国互联网数据根基为使命的公司,十分重视基础数据的采集与建模。随着大数据行业的快速发展,数据采集也变得越来越重要,数据基础夯实与否,取决于数据的采集方式。埋点方式多种多样,按照埋点位置不同,可以分为前端(客户端)埋点与后端(服务器端)埋点。其中全埋点(无埋点)是目前较为流行的前端埋点方式之一。
在服务数百家客户的过程中,我逐渐萌生出写此书的想法,原因有三:
第一,国内企业对全埋点技术需求迫切,但是图书市场仍处空白。
全埋点技术炙手可热,全埋点采用“全部采集,按需选取”的形式,对页面中所有交互元素的用户行为进行采集,通过界面配置来决定哪些数据需要进行分析,也被誉为“最全、最便捷、界面友好、技术门槛低”的数据采集方式。
第二,市面上存在对全埋点概念过度包装的情况,希望本书能够揭开全埋点的神秘面纱。
数据埋点技术在互联网(尤其是移动端)上使用非常普遍,一些数据分析服务厂商将全埋点概念经过包装后,作为核心技术来卖,给人神秘无比的感觉。
第三,给企业带来价值,推动开发者参与大数据行业的生态建设。
神策数据的采集技术一直在不断革新,神策SDK组件统称为OpenSasdk,包括C SDK、C++ SDK、CSharp SDK、Java SDK、Python SDK、PHP SDK、Ruby SDK、Golang SDK、Node SDK、APICloud SDK、Android SDK、iOS SDK等,神策数据愿意将一些成熟的技术与国内外开发者交流与分享,并已于2019年1月正式成立供IT开发者的分享、使用与交流技术的开源社区—Sensors Data开源社区,一方面能够更好地服务客户,推动企业的数字化转型;一方面借此造福同行,推动开发者参与数据行业生态建设。
我希望通过此书全面公开Android 全埋点技术,从0到1进行详细介绍,尤其是控件点击事件全埋点采集的8种方法,并都提供了完整的项目源码。
读者对象
本书适用于初级、中级、高级水平的Android 开发工程师、技术经理、技术总监等。
如何阅读这本书
本书系统讲解了Android 全埋点的解决方案,特别是控件点击事件的全埋点采集,总结并归纳了如下8种解决方案,并且都提供了完整的项目源码。
$AppStart、$AppEnd 全埋点方案
$AppClick 全埋点方案1:代理 View.OnClickListener
$AppClick 全埋点方案2:代理 Window.Callback
$AppClick 全埋点方案3:代理 View.AccessibilityDelegate
$AppClick 全埋点方案4:透明层
$AppClick 全埋点方案5:AspectJ
$AppClick 全埋点方案6:ASM
$AppClick 全埋点方案7:Javassist
$AppClick 全埋点方案8:AST
勘误和支持
由于作者的水平有限,编写时间仓促,以及技术不断地更新和迭代,书中难免会出现一些错误或者不准确的地方,恳请读者批评指正。为此,特意创建了一个网站:http://book.blendercn.org,读者可以将书中的错误发布在Bug勘误表页面中。同时,如果你遇到任何问题,也可以访问Q&A页面,我将尽量在线上为读者提供满意的解答。书中的全部源文件可以从上面这个网站下载,我会将相应的功能更新及时发布出来。如果你有更多的宝贵意见,也欢迎发送邮件至邮箱congcong009@gmail.com,期待能够得到你们的真挚反馈。
致谢
感谢神策数据创始人团队桑文锋、曹犟、付力力、刘耀洲在工作中的指导和帮助。
感谢机械工业出版社华章公司的编辑杨福川老师,在这半年多的时间中始终支持我的写作,你的鼓励和帮助引导我能顺利完成全部书稿。
谨以此书献给大数据行业的关注者和建设者!
王灼洲
2019年2月
Contents 目 录
推荐序
前言
2.1 关键技术Application.Activity LifecycleCallbacks10
第4章 $AppClick全埋点方案1:代理View.OnClickListener47
4.1 关键技术47
4.2 原理概述48
4.3 案例49
4.4 引入DecorView62
4.5 引入ViewTreeObserver.OnGlobalLayoutListener64
4.6 扩展采集能力67
4.7 缺点91
第5章 $AppClick 全埋点方案2:代理Window.Callback92
5.1 关键技术92
5.2 原理概述93
5.3 案例93
5.4 扩展采集能力101
5.5 缺点111
第6章 $AppClick 全埋点方案3:代理View.AccessibilityDelegate112
6.1 关键技术112
6.1.1 Accessibility112
6.1.2 View.AccessibilityDelegate113
6.2 原理概述114
6.3 案例114
6.4 扩展采集能力122
6.5 缺点129
第7章 $AppClick全埋点方案4:透明层130
7.1 原理概述130
7.1.1 View onTouchEvent130
7.1.2 原理概述130
7.2 案例131
7.3 扩展采集能力139
7.4 缺点145
第8章 $AppClick全埋点方案5:AspectJ146
8.1 关键技术146
8.1.1 AOP146
8.1.2 AspectJ148
8.1.3 AspectJ 注解148
8.1.4 切点表达式151
8.1.5 JoinPoint153
8.1.6 call与execution区别155
8.1.7 AspectJ 使用方法157
8.1.8 通过Gradle 配置使用 AspectJ157
8.1.9 自定义Gradle Plugin162
8.1.10 发布 Gradle 插件165
8.1.11 使用 Gradle Plugin167
8.1.12 Plugin Project168
8.2 原理概述171
8.3 案例171
8.4 完善方案193
8.5 扩展采集能力196
8.6 缺点202
第9章 $AppClick全埋点方案6:ASM203
9.1 关键技术203
9.1.1 Gradle Transform203
9.1.2 Gradle Transform 实例207
9.1.3 ASM213
9.2 原理概述220
9.3 案例220
9.4 完善240
9.5 扩展采集能力241
9.6 缺点250
第10章 $AppClick全埋点方案7:Javassist251
10.1 关键技术251
10.1.1 Javassist251
10.1.2 Javassist基础251
10.2 原理概述255
10.3 案例255
10.4 扩展采集能力272
第11章 $AppClick全埋点方案8:AST280
11.1 关键技术280
11.1.1 APT280
11.1.2 Element280
11.1.3 APT实例282
11.1.4 javapoet293
11.1.5 AST295
11.2 原理概述295
11.3 案例295
11.4 完善方案306
11.5 扩展采集能力308
11.6 缺点317
- 点赞
- 收藏
- 关注作者
评论(0)