h5神策埋点_神策Android全埋点⽅案分析
神策Android全埋点⽅案
震惊世界的中国秘方原理简单分析: Activity⽣命周期通过监听Application.ActivityLifecycleCallbacks,fragment的⽣命周期 及⼀些点击事件则编译时通过ASM对相应⽅法进⾏hook 神策Android SDK分析
Gradle 插件分析
image-20180916112522297.png
⽬录
sa-gradle.png
gradle plugin uml
SensorsAnalyticPlugin 插件⼊⼝
SensorsAnalyticsExtension 配置⽂件(debug 是否输出⽇⽇志,disableJar是否修改jar包,exclude不修改的包)
SensorsAnalyticsTransform 遍历jar 遍历⽬录满⾜条件调⽤SensorsAnalyticsClassVisitor
SensorsAnalyticsClassVisitor 扫描到SensorsAnalyticsHookConfig 中配置的⽅法时字节码修改调⽤sdk中
com/sensorsdata/analytics/android/sdk/SensorsDataAutoTrackHelper的⽅法
SDK 分析
org.aspectj:aspectjrt:1.8.10 实际上并没⽤到 其实⽤的是上⾯的ASM 所以可以去除这个依赖以及
榆林学院图书馆com.sensorsdata.analytics.android.sdk.aop这个包
聚丙烯腈AnalyticsMessages 类⽤于上报。逻辑简单看了下 开了个Work线程。直接上报 或者间隔⼀端时间去上报。
TrackTaskManager 任务列表(每次track都是个任务)对应TrackTaskManagerThread 防火墙终结者
TrackTaskManagerThread 这是个Runable ⾥⾯开了个单线程线程池每个3秒去 任务列表拉任务并执⾏
关键的类和⽅法
SensorsDataAutoTrackHelper ⽤于v4/Fragment⽣命周期和各种视图事件的track 和插件 SensorsAnalyticsHookConfig中相对应
SensorsDataActivityLifecycleCallbacks Activity⽣命周期track
SensorsDataAPI如下⽅法(主要附加了⼀些当前环境数据的track 每次track都需要⾛到这⾥这个可能⽐较耗时) 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.
*/
public final boolean hasMessages(int what) {
return mQueue.hasMessages(this, what, null);
}