編譯插樁

編譯插樁是指在代碼編譯期間修改或新增代碼

可以?xún)蓚€(gè)地方進(jìn)行編譯插樁

1誊薄、java編譯為class時(shí)

APT、AndroidAnnotation 等就是在此處觸發(fā)代碼生成

2、.class進(jìn)一步轉(zhuǎn)為.dex時(shí)

一般情況下设江,我們經(jīng)常會(huì)使用編譯插樁實(shí)現(xiàn)如下幾種功能:

日志埋點(diǎn)锦茁;

性能監(jiān)控;

動(dòng)態(tài)權(quán)限控制叉存;

業(yè)務(wù)邏輯跳轉(zhuǎn)時(shí)码俩,校驗(yàn)是否已經(jīng)登錄;

甚至是代碼調(diào)試等歼捏。

ASM可以修改class字節(jié)碼文件實(shí)現(xiàn)編譯插樁

實(shí)現(xiàn)思路

1稿存、遍歷class Gradle1.5.0后我們可以自定義Transform來(lái)獲取class文件引用,但是Transform依賴(lài)Gradle Plugin因此我們要自己創(chuàng)建Gradle Plugin自定義Transform 來(lái)找到class文件

因此我們第一步需要?jiǎng)?chuàng)建一個(gè)單獨(dú)的 Gradle Plugin瞳秽,并在 Gradle Plugin 中使用自定義?Transform?找出所有的 .class 文件瓣履。

2、遍歷到目標(biāo) .class 文件 (Activity)之后练俐,通過(guò) ASM 動(dòng)態(tài)注入需要被插入的字節(jié)碼

創(chuàng)建自定義Gradle插件

1.項(xiàng)目中創(chuàng)建一個(gè)新的 module袖迎,并選擇 Android Library 類(lèi)型

2.?module 中除了 build.gradle 和 main 文件夾之外的所有內(nèi)容都刪除。然后在 main 目錄下分別創(chuàng)建 groovy 和 java 目錄腺晾,因?yàn)镚radle插件是使用groovy語(yǔ)言編寫(xiě)的燕锥,所以需要新建一個(gè)groovy目錄,用來(lái)存放插件相關(guān)的.groovy類(lèi)悯蝉。但ASM是java層面的框架归形,所以在java目錄里存放。


3鼻由、編寫(xiě)插件 這里不詳細(xì)介紹...

4.?修改module 的 build.gradle內(nèi)容

5.最后一步暇榴,創(chuàng)建 properties 文件,至此蕉世,自定義 Gradle 插件就已經(jīng)寫(xiě)完蔼紧,現(xiàn)在可以在 Android Studio 的右邊欄找到 Gradle 中點(diǎn)擊 uploadArchives,執(zhí)行 plugin 的部署任務(wù)讨彼。

自定義 Transform

混淆(proguard)歉井、分包(multi-dex)、jar 包合并(jarMerge)等都是Transform實(shí)現(xiàn)的

Transform 主要作用是檢索項(xiàng)目編譯過(guò)程中的所有文件

1哈误、創(chuàng)建*.groovy文件(具體實(shí)現(xiàn)不詳細(xì)寫(xiě)了),并繼承 Transform 類(lèi)躏嚎,完成后在plugin中注冊(cè)Transform蜜自,這樣plugin和Transform 就關(guān)聯(lián)起來(lái)了,接下來(lái)需要使用ASM將字節(jié)碼插入到目標(biāo)文件中

使用 ASM卢佣,插入字節(jié)碼到 Activity 文件

ASM有解析重荠、訪問(wèn)、寫(xiě)入相關(guān)類(lèi)虚茶,編寫(xiě)

1戈鲁、plugin 的 build.gradle 中仇参,添加對(duì) ASM 的依賴(lài)

2、在plugin module中的src/main/java目錄下創(chuàng)建包asm包婆殿,實(shí)現(xiàn)訪問(wèn)目標(biāo)類(lèi)并插入字節(jié)碼诈乒。

3、修改 自定義的 transform 中的transform 方法婆芦,并將需要插樁的字節(jié)碼插入到目標(biāo)文件中

這里只記錄實(shí)現(xiàn)步驟怕磨。。消约。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末肠鲫,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子或粮,更是在濱河造成了極大的恐慌导饲,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,104評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件氯材,死亡現(xiàn)場(chǎng)離奇詭異渣锦,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)浓体,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)泡挺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人命浴,你說(shuō)我怎么就攤上這事娄猫。” “怎么了生闲?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,697評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵媳溺,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我碍讯,道長(zhǎng)悬蔽,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,836評(píng)論 1 298
  • 正文 為了忘掉前任捉兴,我火速辦了婚禮蝎困,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘倍啥。我一直安慰自己禾乘,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布虽缕。 她就那樣靜靜地躺著始藕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上伍派,一...
    開(kāi)封第一講書(shū)人閱讀 52,441評(píng)論 1 310
  • 那天江耀,我揣著相機(jī)與錄音,去河邊找鬼诉植。 笑死祥国,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的倍踪。 我是一名探鬼主播系宫,決...
    沈念sama閱讀 40,992評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼建车!你這毒婦竟也來(lái)了扩借?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,899評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤缤至,失蹤者是張志新(化名)和其女友劉穎潮罪,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體领斥,經(jīng)...
    沈念sama閱讀 46,457評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡嫉到,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評(píng)論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了月洛。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片何恶。...
    茶點(diǎn)故事閱讀 40,664評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖嚼黔,靈堂內(nèi)的尸體忽然破棺而出细层,到底是詐尸還是另有隱情,我是刑警寧澤唬涧,帶...
    沈念sama閱讀 36,346評(píng)論 5 350
  • 正文 年R本政府宣布疫赎,位于F島的核電站,受9級(jí)特大地震影響碎节,放射性物質(zhì)發(fā)生泄漏捧搞。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評(píng)論 3 334
  • 文/蒙蒙 一狮荔、第九天 我趴在偏房一處隱蔽的房頂上張望胎撇。 院中可真熱鬧,春花似錦殖氏、人聲如沸创坞。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,511評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春总滩,著一層夾襖步出監(jiān)牢的瞬間纲堵,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,611評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工闰渔, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留席函,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,081評(píng)論 3 377
  • 正文 我出身青樓冈涧,卻偏偏與公主長(zhǎng)得像茂附,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子督弓,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容