基于APT的android路由框架(二)--APT技術(shù)

Android 中的APT

基于APT的android路由框架(一)

一稠肘、什么是APT

APT(Annotation Processing Tool 的簡(jiǎn)稱)摊趾,可以在代碼編譯期解析注解泪掀,并且生成新的 Java 文件负懦,減少手動(dòng)的代碼輸入∨憬荩現(xiàn)在有很多主流庫都用上了 APT踩窖,比如 Dagger2, ButterKnife, EventBus3 等

? ? ? ? ? ? 本文通過實(shí)現(xiàn)簡(jiǎn)單的ButterKnife控件綁定介紹APT的內(nèi)容

二乓诽、AbstractProcessor

? ? ? ? 在編譯時(shí)編譯器會(huì)檢查AbstractProcessor的子類帜羊,并且調(diào)用該類型的過程函數(shù),然后將添加了注解的所有元素都傳遞到處理函數(shù)中鸠天,使得開發(fā)人員可以在編譯器進(jìn)行相應(yīng)的處理讼育,例如,根據(jù)注解生成新的的Java類稠集,這也就是ButterKnife奶段,改造,牽引等開源庫的基本原理剥纷。Java的API已經(jīng)提供了掃描源碼并解析注解的框架痹籍,我們可以繼承AbstractProcessor類來提供實(shí)現(xiàn)自己的解析注解邏輯。

如何使用Processor

? ? 1.新建java-libreary才可以使用Processor哦

? ? ? ? // 自動(dòng)注冊(cè)processor的類庫谷歌出品

? ? ? ? implementation'com.google.auto.service:auto-service:1.0-rc2'

? ? ? ? //javapoet? 生成java代碼的類庫

? ? ? ? implementation'com.squareup:javapoet:1.7.0'

2.在項(xiàng)目中引入processor

annotationProcessor project(':java工程')

annotationProcessor是APT工具中的一種晦鞋,他是google開發(fā)的內(nèi)置框架蹲缠,不需要引入,可以直接在build.gradle文件中使用悠垛,如下

創(chuàng)建一個(gè)Processor類繼承AbstractProcessor

聲明一個(gè)自定義Process

process 方法會(huì)在編譯時(shí)被調(diào)用线定,set集合存放著所有被@SupportedAnnotationTypes()標(biāo)記的注解的Element(例如:所有被BundView注解的View的信息包括全類名,父Element這這里為activity)确买;


編譯時(shí)拿到所有的activity和View信息生產(chǎn)代碼

processElement處理element 保存所有activity 和 view的信息

createJavaFile 通過javapoet庫就會(huì)在build->generated->source->apt目錄下生產(chǎn)java文件

JAVAPOET? GitHub地址

通過javapoet庫生產(chǎn)java文件


生產(chǎn)的java文件

ButterKnife的bund方法就是通過類全名+_BundleView反射獲取類對(duì)象實(shí)例化

bund文件

使用方法


使用方法

不要在意報(bào)紅的地方斤讥,編譯器問題。是不是和ButterKnife很相似的湾趾,其實(shí)ButterKnife也是這個(gè)原理芭商,當(dāng)然他的更加復(fù)雜派草。我這里只是簡(jiǎn)單的實(shí)現(xiàn),讓大家對(duì)APT技術(shù)有個(gè)了解铛楣,具體的還需要大家繼續(xù)努力學(xué)習(xí)近迁。

項(xiàng)目地址已上傳Github

越努力越幸運(yùn),大家共勉

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蛉艾,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子衷敌,更是在濱河造成了極大的恐慌勿侯,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,423評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件缴罗,死亡現(xiàn)場(chǎng)離奇詭異助琐,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)面氓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,147評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門兵钮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人舌界,你說我怎么就攤上這事掘譬。” “怎么了呻拌?”我有些...
    開封第一講書人閱讀 157,019評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵葱轩,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我藐握,道長(zhǎng)靴拱,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,443評(píng)論 1 283
  • 正文 為了忘掉前任猾普,我火速辦了婚禮袜炕,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘初家。我一直安慰自己偎窘,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,535評(píng)論 6 385
  • 文/花漫 我一把揭開白布溜在。 她就那樣靜靜地躺著评架,像睡著了一般。 火紅的嫁衣襯著肌膚如雪炕泳。 梳的紋絲不亂的頭發(fā)上纵诞,一...
    開封第一講書人閱讀 49,798評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音培遵,去河邊找鬼浙芙。 笑死登刺,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的嗡呼。 我是一名探鬼主播纸俭,決...
    沈念sama閱讀 38,941評(píng)論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼南窗!你這毒婦竟也來了揍很?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,704評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤万伤,失蹤者是張志新(化名)和其女友劉穎窒悔,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體敌买,經(jīng)...
    沈念sama閱讀 44,152評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡简珠,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,494評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了虹钮。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片聋庵。...
    茶點(diǎn)故事閱讀 38,629評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖芙粱,靈堂內(nèi)的尸體忽然破棺而出祭玉,到底是詐尸還是另有隱情,我是刑警寧澤春畔,帶...
    沈念sama閱讀 34,295評(píng)論 4 329
  • 正文 年R本政府宣布攘宙,位于F島的核電站,受9級(jí)特大地震影響拐迁,放射性物質(zhì)發(fā)生泄漏蹭劈。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,901評(píng)論 3 313
  • 文/蒙蒙 一线召、第九天 我趴在偏房一處隱蔽的房頂上張望铺韧。 院中可真熱鬧,春花似錦缓淹、人聲如沸哈打。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽料仗。三九已至,卻和暖如春伏蚊,著一層夾襖步出監(jiān)牢的瞬間立轧,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,978評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留氛改,地道東北人帐萎。 一個(gè)月前我還...
    沈念sama閱讀 46,333評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像胜卤,于是被迫代替她去往敵國(guó)和親疆导。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,499評(píng)論 2 348

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

  • 前面寫了Android 開發(fā):由模塊化到組件化(一),很多小伙伴來問怎么沒有Demo啊?之所以沒有立刻放demo的...
    涅槃1992閱讀 8,015評(píng)論 4 37
  • 整體Retrofit內(nèi)容如下: 1葛躏、Retrofit解析1之前哨站——理解RESTful 2澈段、Retrofit解析...
    隔壁老李頭閱讀 6,421評(píng)論 4 31
  • JavaPoet - 優(yōu)雅地生成代碼 [TOC] 一、項(xiàng)目簡(jiǎn)介 JavaPoet是square推出的開源java代...
    everlastxgb閱讀 21,075評(píng)論 1 28
  • 前言 對(duì)注解舰攒,一開始是在學(xué)習(xí)java的時(shí)候接觸到的败富,就是在《Thinking in Java》里草草看過。后來開發(fā)...
    許方鎮(zhèn)閱讀 4,708評(píng)論 0 6
  • 臨近春節(jié)家里外面事情很多芒率,時(shí)不時(shí)要外出囤耳,平日陽陽都會(huì)跟我一起出去篙顺,可是因?yàn)槊刻煊凶鳂I(yè)偶芍,他必須要在家完成當(dāng)天的作業(yè)。...
    明月心語親子小記閱讀 202評(píng)論 0 6