神策Android全埋点方案
原理简单分析: Activity生命周期通过监听Application.ActivityLifecycleCallbacks,fragment的生命周期 及一些点击事件则编译时通过ASM对相应方法进行hook
神策Android SDK分析
Gradle 插件分析
仓库上好像没有插件代码,通过 http://jcenter.bintray.com/com/sensorsdata/analytics/android/android-gradle-plugin2/2.0.0/ 下载相应jar包解压
SDK 分析
org.aspectj:aspectjrt:1.8.10 实际上并没用到 其实用的是上面的ASM 所以可以去除这个依赖以及 com.sensorsdata.analytics.android.sdk.aop这个包
AnalyticsMessages 类用于上报。逻辑简单看了下 开了个Work线程。直接上报 或者间隔一端时间去上报。
TrackTaskManager 任务列表(每次track都是个任务)对应TrackTaskManagerThread
TrackTaskManagerThread 这是个Runable 里面开了个单线程线程池每个3秒去 任务列表拉任务并执行
关键的类和方法
private void trackEvent(final EventType eventType, final String eventName, final JSONObject properties, final String
originalDistinctId)
涉及的业务的还是需要额外写入代码 比如点击按钮也只能获取到当前页面和按钮上的文字
对于B端比较关注一些业务数据的不合适 还需要寻找新的解决方法
每次页面操作和点击事件都会去额外执行的方法需要 测下耗时 还有打点前后对app性能的影响
sdk采集数据可以参考上面的关键方法和类。 打包插件可以参考fork一份 方便自己配置需要Hook哪些方法
handle是否提交了相应任务可以用这个方法判断
* Check if there are any pending posts of messages with code 'what' in
* the message queue.