本文將會(huì)介紹Android端非侵入式數(shù)據(jù)采集框架EMonitor
手機(jī)客戶(hù)端作為重要的流量入口,經(jīng)常會(huì)肩負(fù)著用戶(hù)數(shù)據(jù)監(jiān)測(cè)和數(shù)據(jù)采集的重任匀伏。待采集的數(shù)據(jù)包括用戶(hù)何時(shí)啟動(dòng)應(yīng)用,瀏覽了哪些頁(yè)面镰吆,點(diǎn)擊了哪些按鈕等等帘撰,對(duì)于此類(lèi)需求,比較簡(jiǎn)單粗暴的做法就是手動(dòng)埋點(diǎn)万皿,在需要采集數(shù)據(jù)的位置添加相應(yīng)的代碼摧找。這種做法不僅工作量巨大,而且會(huì)增加代碼的耦合度牢硅,后期維護(hù)成本高蹬耘。
EMonitor是一款非侵入式的數(shù)據(jù)采集框架,開(kāi)發(fā)者不需要改動(dòng)任何代碼减余,只要引入EMonitor庫(kù)并調(diào)用相關(guān)接口就可以實(shí)現(xiàn)全量的數(shù)據(jù)采集综苔,代碼耦合度低,易于后期維護(hù)位岔。
1.引入EMonitor庫(kù)
在project下的build.gradle文件中添加依賴(lài):
maven {url 'https://dl.bintray.com/jnzhang/EMonitor'}
classpath 'com.emonitor.core:emonitorplugin:1.4.8'
在module下的build.gradle文件中添加引用和插件:
apply plugin: 'emplugin'
implementation 'com.emonitor.core:emonitorcore:1.3.1'
2.初始化EmBaseTask
在應(yīng)用程序的入口初始化EmBaseTask:
EmBaseTask.getInstance().init(context);
初始化成功后如筛,EMonitor將會(huì)對(duì)應(yīng)用的各種行為進(jìn)行統(tǒng)計(jì),并將統(tǒng)計(jì)到的數(shù)據(jù)保存在應(yīng)用目錄下的emonitor_log.log文件中抒抬,開(kāi)發(fā)者可以獲取log中的內(nèi)容進(jìn)行相應(yīng)的處理杨刨,log文件中數(shù)據(jù)的樣式:
2018-11-02 16:38:41 onPause/MainActivity:
2018-11-02 16:38:41 onResume/TaskActivity:
2018-11-02 16:38:43 onClick/TaskActivity: AppCompatButton[0]LinearLayout[0]ConstraintLayout[0]ContentFrameLayout[0]ActionBarOverlayLayout[0]FrameLayout[1]LinearLayout[0]
2018-11-02 16:39:25 onClick/TaskActivity: AppCompatButton[1]LinearLayout[0]ConstraintLayout[0]ContentFrameLayout[0]ActionBarOverlayLayout[0]FrameLayout[1]LinearLayout[0]
2018-11-02 16:39:29 onClick/TaskActivity: AppCompatButton[2]LinearLayout[0]ConstraintLayout[0]ContentFrameLayout[0]ActionBarOverlayLayout[0]FrameLayout[1]LinearLayout[0]
2018-11-02 16:39:32 onClick/TaskActivity: AppCompatButton[0]LinearLayout[3]LinearLayout[0]ConstraintLayout[0]ContentFrameLayout[0]ActionBarOverlayLayout[0]FrameLayout[1]LinearLayout[0]
2018-11-02 16:40:18 onClick/TaskActivity: AppCompatButton[1]LinearLayout[3]LinearLayout[0]ConstraintLayout[0]ContentFrameLayout[0]ActionBarOverlayLayout[0]FrameLayout[1]LinearLayout[0]
2018-11-02 16:45:11 onResume/MainActivity:
2018-11-02 16:45:11 onPause/MainActivity:
2018-11-02 16:45:11 onResume/TaskActivity:
2018-11-02 16:45:13 onClick/TaskActivity: LinearLayout[0]FrameLayout[1]ActionBarOverlayLayout[0]ContentFrameLayout[0]ConstraintLayout[0]LinearLayout[0]AppCompatButton[0]
2018-11-02 16:45:47 onClick/TaskActivity: LinearLayout[0]FrameLayout[1]ActionBarOverlayLayout[0]ContentFrameLayout[0]ConstraintLayout[0]LinearLayout[0]AppCompatButton[1]
2018-11-02 16:47:02 onPause/TaskActivity:
2018-11-02 16:47:02 onResume/MainActivity:
3.實(shí)現(xiàn)相關(guān)接口
很多時(shí)候EMonitor自帶的Log文件并不能滿(mǎn)足開(kāi)發(fā)者的需求,EMonitor也提供了一些接口擦剑,開(kāi)發(fā)者可以調(diào)用這些接口來(lái)實(shí)現(xiàn)自己的業(yè)務(wù)邏輯妖胀。
3.1調(diào)用用戶(hù)點(diǎn)擊某個(gè)控件的監(jiān)聽(tīng):
EmBaseTask.getInstance().setEmClickListener(new EmClickListener() {
@Override
public void onClick(SingleClickBean singleClickBean) {
//業(yè)務(wù)邏輯
}
});
3.2調(diào)用用戶(hù)進(jìn)出某個(gè)頁(yè)面的監(jiān)聽(tīng):
EmBaseTask.getInstance().setEmEventListener(new EmEventListener() {
@Override
public void EmOnResume(EmEventBean emEventBean) {
//業(yè)務(wù)邏輯
}
@Override
public void EmOnPause(EmEventBean emEventBean) {
//業(yè)務(wù)邏輯
}
});
EMonitor框架接下來(lái)將會(huì)逐步添加列表瀏覽事件監(jiān)測(cè)和用戶(hù)地理位置監(jiān)測(cè)等功能。