欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

Android無埋點(diǎn)的技術(shù)選型之路

數(shù)極客是國內(nèi)新一代用戶行為分析平臺,支持無埋點(diǎn)采集,前端代碼埋點(diǎn)采集,后端代碼埋點(diǎn)采集等多種混合數(shù)據(jù)采集方式,支持30多種數(shù)據(jù)可視化效果,是增長***必的備大數(shù)據(jù)分析工具,支持APP分析數(shù)據(jù)網(wǎng)站分析及用戶畫像,獨(dú)創(chuàng)了6大轉(zhuǎn)化率分析模型,的英文用戶行為分析領(lǐng)域首家應(yīng)用定量分析與定性分析方法的數(shù)據(jù)分析產(chǎn)品,運(yùn)用數(shù)極客用戶行為錄屏系統(tǒng),可以分析并優(yōu)化用戶體驗(yàn)的細(xì)節(jié),基于用戶行為分析系統(tǒng)- ,了提供會(huì)員營銷系統(tǒng)-?A / B測試工具兩大數(shù)據(jù)智能應(yīng)用解決方案,企業(yè)使得可以快速的實(shí)現(xiàn)數(shù)據(jù)驅(qū)動(dòng)增長。
歡迎關(guān)注數(shù)極客微信公眾號:shujujike,更全面的獲取無埋點(diǎn)及用戶行為大數(shù)據(jù)分析的要點(diǎn)。
原創(chuàng)作者:楊永強(qiáng)數(shù)極客技術(shù)合伙人

成都創(chuàng)新互聯(lián)公司自成立以來,一直致力于為企業(yè)提供從網(wǎng)站策劃、網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、成都網(wǎng)站制作、電子商務(wù)、網(wǎng)站推廣、網(wǎng)站優(yōu)化到為企業(yè)提供個(gè)性化軟件開發(fā)等基于互聯(lián)網(wǎng)的全面整合營銷服務(wù)。公司擁有豐富的網(wǎng)站建設(shè)和互聯(lián)網(wǎng)應(yīng)用系統(tǒng)開發(fā)管理經(jīng)驗(yàn)、成熟的應(yīng)用系統(tǒng)解決方案、優(yōu)秀的網(wǎng)站開發(fā)工程師團(tuán)隊(duì)及專業(yè)的網(wǎng)站設(shè)計(jì)師團(tuán)隊(duì)。

概述
無埋點(diǎn)也叫全埋點(diǎn)、自動(dòng)埋點(diǎn),無埋點(diǎn)就是指不需要開發(fā)人員添加任何代碼,就可以實(shí)現(xiàn)數(shù)據(jù)的采集。
換句話說也就是在我們需要采集數(shù)據(jù)的位置插入采集數(shù)據(jù)的代碼,而這個(gè)插入采集代碼的過程不需要我們手動(dòng)去添加,而是自動(dòng)實(shí)現(xiàn)插入,這就是無埋點(diǎn)。
用戶行為數(shù)據(jù),就是用戶在操作app的過程中產(chǎn)生的行為,比如 打開頁面 / 關(guān)閉頁面 / 瀏覽頁面 / 點(diǎn)擊按鈕 /退出后臺 / 返回前臺 等事件,這些行為事件連起來就能組成一個(gè)用戶的行為事件鏈條,這個(gè)鏈條可以理解為這個(gè)用戶的行為數(shù)據(jù)。

目錄
一 、技術(shù)方案對比
1.1?幾種無埋點(diǎn)實(shí)現(xiàn)方案介紹
1.2?處理時(shí)機(jī)對比
1.3?優(yōu)缺點(diǎn)對比
二、實(shí)現(xiàn)ASM方案的準(zhǔn)備知識
2.1 什么是AOP
2.2 gradle plugin的實(shí)現(xiàn)
2.3 Android app的編譯過程
2.4 ASM介紹
三、?ASM方案實(shí)現(xiàn)方法
3.1實(shí)現(xiàn)gradle plugin
3.2通過ASM實(shí)現(xiàn)hook代碼
3.3根據(jù)業(yè)務(wù)邏輯實(shí)現(xiàn)自己的SDK代碼
四、總結(jié)

一 、技術(shù)方案對比
1.1?幾種無埋點(diǎn)實(shí)現(xiàn)方案介紹
在做無埋點(diǎn)技術(shù)選型時(shí),我們對以下幾種主流Android 無埋點(diǎn)方案進(jìn)行對比:
AspectJ 方案
Aspectj 是它有一套自己的Java編譯器,當(dāng)我們用這個(gè)編譯器進(jìn)行編譯時(shí)Aspectj會(huì)根據(jù)自己的方式進(jìn)行代碼插入,從而實(shí)現(xiàn)在編譯期間插入埋點(diǎn)代碼。
可參考:
利用AspectJ實(shí)現(xiàn)Android端非侵入式埋點(diǎn)
AspectJ in Android (一),AspectJ 基礎(chǔ)概念
AspectJ in Android (二),AspectJ 語法
AspectJ in Android (三),AspectJ 兩種用法以及常見問題

AST 方案
當(dāng)IDE對項(xiàng)目code進(jìn)行編譯時(shí),最先進(jìn)行的是對源代碼進(jìn)行編譯從而生成 .java 文件。
此方案就是利用這個(gè)時(shí)機(jī),通過自定義注解器(APT)來切入我們需要插入代碼的點(diǎn),再通過AST的語法來插入埋點(diǎn)代碼。
可參考:
Android AOP 抽象語法樹
基于AST的組件化自動(dòng)插樁方案

Javassist 方案
在Android app編譯的過程中,.class 最終會(huì)轉(zhuǎn)換為 .dex 文件,gradle 在編譯的過程中 允許開發(fā)人員通過gradle plugin來修改class文件。這樣就可以利用 Javassist 來修改 .class 字節(jié)碼文件,從而實(shí)現(xiàn)插入埋點(diǎn)代碼的目的。
可參考:
Javassist 使用指南 1?
Javassist 使用指南 2

ASM? 方案
ASM和 Javassist 原理基本一樣,只是在操作.class 文件時(shí)用的是ASM。
本文將主要介紹此種方式。

1.2?處理時(shí)機(jī)對比
Android無埋點(diǎn)的技術(shù)選型之路

1.3?優(yōu)缺點(diǎn)對比
Android無埋點(diǎn)的技術(shù)選型之路

AspectJ 功能非常強(qiáng)大,使用起來也很方便,但是其不支持三方庫的修改,所以果斷放棄。
AST 對于不了解語法樹 /注解 這些相對晦澀的知識點(diǎn)的不建議使用,后期維護(hù)起來非常不便,遂放棄。
Javassist 和 ASM兩者原理基本一樣,只是在后期操作字節(jié)碼時(shí) ASM 比 Javassist性能更好,因?yàn)閖avassist用到反射,所以性能上有犧牲。ASM是非常底層的,操作起來難度大,但是性能非常優(yōu)秀。作為三方SDK,對源代碼的侵入程度和性能要求非常嚴(yán)格,所以最終選擇ASM方案。

二、實(shí)現(xiàn)ASM方案的準(zhǔn)備知識
2.1 什么是AOP
AOP 面向切向編程(Aspect Oriented Programming)與之對應(yīng)的是OOP(ObjectOriented Programming)面向?qū)ο缶幊獭?br/>也可以自行Google,不再贅述。
2.2 gradle plugin的實(shí)現(xiàn)
Android Gradle Plugin 版本在1.5.0及以上,Google 官方提供了可以通過實(shí)現(xiàn)Plugin<Project> 接口,來實(shí)現(xiàn)編譯成dex文件之前來修改.class 文件。
2.3 Android app的編譯過程
Android無埋點(diǎn)的技術(shù)選型之路

2.4 ASM介紹
ASM是一個(gè)java字節(jié)碼操縱框架,它能被用來動(dòng)態(tài)生成類或者增強(qiáng)既有類的功能。ASM 可以直接產(chǎn)生二進(jìn)制 class 文件,也可以在類被加載入 Java 虛擬機(jī)之前動(dòng)態(tài)改變類行為。
ASM相關(guān)可以參考:ASM 開發(fā)指導(dǎo)
三、?ASM方案實(shí)現(xiàn)方法
3.1實(shí)現(xiàn)gradle plugin
實(shí)現(xiàn)Plugin<Project>接口
Android無埋點(diǎn)的技術(shù)選型之路
繼承 Transform?
Android無埋點(diǎn)的技術(shù)選型之路
對于transform API 不熟悉的可以查看API。
最核心的代碼就是遍歷所有的class文件
Android無埋點(diǎn)的技術(shù)選型之路
3.2通過ASM實(shí)現(xiàn)hook代碼
在ASM的核心實(shí)現(xiàn)中,它主要有以下幾個(gè)類、接口(在org.objectweb.asm包中)。
Cla***eader類:字節(jié)碼的讀取與分析引擎。它采用類似SAX的事件讀取機(jī)制,每當(dāng)有事件發(fā)生時(shí),調(diào)用注冊的ClassVisitor、AnnotationVisitor、FieldVisitor、MethodVisitor做相應(yīng)的處理。
ClassVisitor接口:定義在讀取Class字節(jié)碼時(shí)會(huì)觸發(fā)的事件,如類頭解析完成、注解解析、字段解析、方法解析等。
AnnotationVisitor接口:定義在解析注解時(shí)會(huì)觸發(fā)的事件,如解析到一個(gè)基本值類型的注解、enum值類型的注解、Array值類型的注解、注解值類型的注解等。
FieldVisitor接口:定義在解析字段時(shí)觸發(fā)的事件,如解析到字段上的注解、解析到字段相關(guān)的屬性等。
MethodVisitor接口:定義在解析方法時(shí)觸發(fā)的事件,如方法上的注解、屬性、代碼等。
ClassWriter類:它實(shí)現(xiàn)了ClassVisitor接口,用于拼接字節(jié)碼。
AnnotationWriter類:它實(shí)現(xiàn)了AnnotationVisitor接口,用于拼接注解相關(guān)字節(jié)碼。
FieldWriter類:它實(shí)現(xiàn)了FieldVisitor接口,用于拼接字段相關(guān)字節(jié)碼。
MethodWriter類:它實(shí)現(xiàn)了MethodVisitor接口,用于拼接方法相關(guān)字節(jié)碼。
SignatureReader類:對類定義、字段定義、方法定義、本地變量定義的簽名的解析。Signature因范型引入,用于存儲(chǔ)范型定義時(shí)的元數(shù)據(jù)(因?yàn)檫@些元數(shù)據(jù)在運(yùn)行時(shí)會(huì)被擦除)。
SignatureVisitor接口:定義在解析Signature時(shí)會(huì)觸發(fā)的事件,如正常的Type參數(shù)、類或接口的邊界等。
SignatureWriter類:它實(shí)現(xiàn)了SignatureVisitor接口,用于拼接范型相關(guān)字節(jié)碼。
Attribute類:字節(jié)碼中屬性的類抽象。
ByteVector類:字節(jié)碼二進(jìn)制存儲(chǔ)的容器。
Opcodes接口:字節(jié)碼指令的一些常量定義。
Type類:類型相關(guān)的常量定義以及一些基于其上的操作。
Android無埋點(diǎn)的技術(shù)選型之路
參考:?ASM 源碼解析? ,http://www.blogjava.net/DLevin/archive/2014/06/25/414292.html

步驟
1.通過Cla***eader 讀取class 文件
2.通過ClassWriter來修改class 文件,修改時(shí)需要用到ClassVisitor /MethodVisitor來訪問class 內(nèi)部的成員 方法,再通過相關(guān)API來插入埋點(diǎn)代碼
Android無埋點(diǎn)的技術(shù)選型之路
3.3根據(jù)業(yè)務(wù)邏輯實(shí)現(xiàn)自己的SDK代碼
當(dāng)hook成功后,剩下的就是自己根據(jù)業(yè)務(wù)邏輯去實(shí)現(xiàn)相關(guān)代碼,此處不贅述。
四、總結(jié)
本文是從宏觀上介紹無埋點(diǎn)的幾種技術(shù),和ASM的實(shí)現(xiàn)思路,希望能對無埋點(diǎn)有一個(gè)全局的認(rèn)識。

網(wǎng)頁名稱:Android無埋點(diǎn)的技術(shù)選型之路
瀏覽路徑:http://chinadenli.net/article30/gieiso.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)商城網(wǎng)站自適應(yīng)網(wǎng)站網(wǎng)站策劃企業(yè)建站移動(dòng)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)