文字版無(wú)聲-安卓Gradle插件開(kāi)發(fā)-ASM字節(jié)碼修改-AutoRegister實(shí)現(xiàn)-筆記

video:?https://www.bilibili.com/video/BV1KT4y1E7Q7?from=search&seid=16580040802900307721

web:http://m.itdecent.cn/u/d0c911043d96

code:https://github.com/jiayuliang1314/PluginAsm.git


安卓Gradle插件開(kāi)發(fā)-ASM字節(jié)碼修改-AutoRegister實(shí)現(xiàn)8

1.基本的asm操作

找到類,位置,插入代碼


安卓Gradle插件開(kāi)發(fā)-ASM字節(jié)碼修改-AutoRegister實(shí)現(xiàn)7

app/build/generated/intermediates/transforms/auto-register

1.transform任務(wù)需要做產(chǎn)物傳遞,啥事產(chǎn)物就是transform的翻譯就是轉(zhuǎn)化,你轉(zhuǎn)化完了要交回給其他transform任務(wù)比如dextransform 和proguardtransform ,他們分別是jar轉(zhuǎn)dex的任務(wù)和混淆任務(wù)


安卓Gradle插件開(kāi)發(fā)-ASM字節(jié)碼修改-AutoRegister實(shí)現(xiàn)6

1.ASMPlugin找到差異

2.

安卓Gradle插件開(kāi)發(fā)-ASM字節(jié)碼修改-AutoRegister實(shí)現(xiàn)5

1.?找到需要插入的類 和需要被插入的類

ScanClassVisitor

首先 我們通過(guò)ClassReader把整個(gè)class文件讀取到內(nèi)存,然后聲明了一個(gè)ClassWriter用于代碼寫(xiě)入,

然后自定義了一個(gè)ScanClassVisitor類訪問(wèn)器來(lái)訪問(wèn)類里面的所有元素,包括屬性和方法


安卓Gradle插件開(kāi)發(fā)-ASM字節(jié)碼修改-AutoRegister實(shí)現(xiàn)4

1.掃描jar包所有class文件,jar 用完close

? ? gradlew assembleDebug --stacktrace

2.目錄里面的class也遍歷出來(lái)

3.過(guò)濾掉比如安卓自帶的androdx里面的,META-INF這些都是jar包的簽名文件 保證安全和監(jiān)聽(tīng)jar包變化的


安卓Gradle插件開(kāi)發(fā)-ASM字節(jié)碼修改-AutoRegister實(shí)現(xiàn)3

1.自定義一個(gè)transform任務(wù) 實(shí)現(xiàn)jar包和目錄掃描

/build.gradle的配置信息AppExtension

def android = project.extensions.getByType(AppExtension)

def transform =new RegisterTransform(project)

android.registerTransform(transform)

2.遍歷jar?

? ? 遍歷文件夾?intermediates\javac\debug\classes


安卓Gradle插件開(kāi)發(fā)-ASM字節(jié)碼修改-AutoRegister實(shí)現(xiàn)2

插件步驟

1.刪除多余目錄

2.建立groovy目錄

3.我們建立一個(gè)Plugin插件的基本文件必須是groovy文件

4.我們忘了一部 需要配置一下插件的buildgradle 我們直接去AutoRegister復(fù)制一份,定義了一個(gè)uploadArchives的Task 定義之后我們可以在gradle側(cè)邊欄找到他,我們編輯完之后點(diǎn)擊uploadArchives這個(gè)任務(wù)

5.配置信息

插件調(diào)試

0.斷點(diǎn)加好

1.一個(gè)remote調(diào)試器?-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005

這里vmoptions的這個(gè)暫停要加y就是yes,suspend=y

2.將remote加到一個(gè)任務(wù),點(diǎn)debug

3.將remote也點(diǎn)debug


安卓Gradle插件開(kāi)發(fā)-ASM字節(jié)碼修改-AutoRegister實(shí)現(xiàn)1

1.gradle插件開(kāi)發(fā)

2.gradle插件調(diào)試

3.gradle Transform任務(wù)的執(zhí)行方式

4.ASM字節(jié)碼修改

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容