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

上面我們完成了transform的基本掃描 我們回顧一下


image.png

我們看到掃描出來的要么是jar包要么是路徑目錄,但是其實(shí)我們的目的是拿到class文件
所以我們下一步是拿到所有的類文件 然后打印出來 我們看看怎么做吧

  /**
     * 掃描jar包所有class文件
     * @param file
     */
    private void scanJar(File file){
          //通過jar包的file對(duì)象獲取一個(gè)jar包對(duì)象
          def jarFile=new JarFile(file)
        def enumeration = jarFile.entries()
        //通過遍歷獲取class 然后打印出來 我們?cè)囋?記住先上傳
        while (enumeration.hasMoreElements()){
            def jarEntry = enumeration.nextElement()
            def entryName = jarEntry.name
            project.logger.error('class---'+entryName)
        }


    }

上傳然后測(cè)試

image.png

我們這里可以看到 我們已經(jīng)能遍歷出這些jar包里面的文件 我們?cè)俅蛞幌?歸屬把 比如他們各自在哪個(gè)jar包里面

出現(xiàn)一個(gè)問題


image.png

R.jar被占用了 其實(shí)是因?yàn)槲覀兩洗螔呙?這個(gè)jar包沒有關(guān)閉 所以導(dǎo)致了資源占用 !R┦怼7孟А砚哆!

解決方法就是加一下close

這個(gè)問題 我猜測(cè)還是jar包占用 我們可以直接用命令行看看

gradlew assembleDebug --stacktrace

image.png

這里有一個(gè)jarInput 因?yàn)槲覀兪侵苯訌纳厦鎻?fù)制下來的 我們改一下

剛剛弄其他去了 抱歉 我們繼續(xù)

這樣打印有點(diǎn)煞筆 我們重新來

image.png

基本可以看出來是哪些文件 很明顯很多jar包我們沒有必要去掃描 比如安卓自帶的androdx里面的 卧惜,
我們可以過濾掉他們
我發(fā)現(xiàn)androidx開頭的太多了 而且都是我們不需要的 而且我們想想 我們還需要處理android開頭的 兼容一下舊版本
我們直接寫成這樣把

image.png

我們發(fā)現(xiàn)過濾完就剩這些


image.png

其實(shí)了解jar包的同學(xué)都知道 META-INF這些都是jar包的簽名文件 保證安全和監(jiān)聽jar包變化的對(duì)我們來說也是多余的 也可以過濾掉

image.png

我們會(huì)發(fā)現(xiàn)這里居然一個(gè)jar包都沒掃描 其實(shí)很容易理解 我們沒用第三方 也沒有其他module所以的確jar包真的都只有android自帶的

還有一點(diǎn)我們需要了解 就是其實(shí)我們這里做了一個(gè)操作打開jar包 掃描jar包第一個(gè)文件 這個(gè)操作是耗時(shí)的尸变,有沒有優(yōu)化方案 蝗罗,這個(gè)需要大家去觀察一下安卓自帶jar包的命名方式 艇棕,然后通過正則表達(dá)式在遍歷jar包之前就可以過濾,提高我們插件的速度

下面我們要找的class文件就剩下在這里了
image.png

下節(jié)課講bye

我們接著上節(jié)課來 上節(jié)課遍歷完jar包的class 我們這節(jié)課把目錄里面的class也遍歷出來

image.png

通過這里可以看到 我們找到我們app項(xiàng)目的主要代碼了 對(duì)吧 比如這個(gè)MainActivity.class
但是其實(shí)BuildConfig.class這個(gè)對(duì)我們來說是多余的 我們不需要處理他 我們也可以選擇過濾一下

這里我們先不做處理 我們要做的是 完成一些代碼的注入 和注冊(cè)

我們回到這個(gè)課程一開始部分 我們打開autoregister

image.png

這一部分代碼 就是我們要讓我們插件自動(dòng)完成的部分

現(xiàn)在我們先要定義一下這些類和接口 然后通過transform遍歷找到對(duì)應(yīng)的類和接口

首先來定義一下

image.png

我們自定義了一下這些類和接口
接下來我們先執(zhí)行一下掃描

image.png

觀察一下這些類的特點(diǎn)

已經(jīng)掃描出來了 但是他們的連接方式都是通過""符號(hào)來的 對(duì)吧

我們的目標(biāo)類 CategoryManager我們可以輕易找到 串塑,但是CategoryA我們要把它注入到CategoryManager中

類似于這樣


image.png

當(dāng)然這個(gè)ICategory接口是我們需要類的依據(jù)

所以我們首先是要找到這個(gè)接口的實(shí)現(xiàn)類 比如CategoryA這要怎么做 這要借助于ASM
對(duì)類進(jìn)行訪問和修改沼琉,就是基于字節(jié)碼修改 都非常方便

具體怎么做 我們接下來就要做
先暫停 我們下課 有空繼續(xù)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市桩匪,隨后出現(xiàn)的幾起案子打瘪,更是在濱河造成了極大的恐慌,老刑警劉巖吸祟,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瑟慈,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡屋匕,警方通過查閱死者的電腦和手機(jī)葛碧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來过吻,“玉大人进泼,你說我怎么就攤上這事蔗衡。” “怎么了乳绕?”我有些...
    開封第一講書人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵绞惦,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我洋措,道長(zhǎng)济蝉,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任菠发,我火速辦了婚禮王滤,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘滓鸠。我一直安慰自己雁乡,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開白布糜俗。 她就那樣靜靜地躺著踱稍,像睡著了一般。 火紅的嫁衣襯著肌膚如雪悠抹。 梳的紋絲不亂的頭發(fā)上珠月,一...
    開封第一講書人閱讀 51,146評(píng)論 1 297
  • 那天,我揣著相機(jī)與錄音楔敌,去河邊找鬼桥温。 笑死,一個(gè)胖子當(dāng)著我的面吹牛梁丘,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播旺韭,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼氛谜,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了区端?” 一聲冷哼從身側(cè)響起值漫,我...
    開封第一講書人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎织盼,沒想到半個(gè)月后杨何,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡沥邻,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年危虱,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片唐全。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡埃跷,死狀恐怖蕊玷,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情弥雹,我是刑警寧澤垃帅,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站剪勿,受9級(jí)特大地震影響贸诚,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜厕吉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一酱固、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧赴涵,春花似錦媒怯、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至寄纵,卻和暖如春鳖敷,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背程拭。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工定踱, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人恃鞋。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓崖媚,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親恤浪。 傳聞我的和親對(duì)象是個(gè)殘疾皇子畅哑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353