001概述
文章將介紹如何在eclipse下使用apt開發(fā),結(jié)合JakeWharton大神的javapoet讓apt開發(fā)飛起來。
002背景
栗子:同一個父類,子類繼承完后,每次都要拷貝黏貼,然后重寫,時間花得太不值(⊙o⊙)…
同樣的還有創(chuàng)建{實體類}的時候,需要get、set,使用gson的時候還要@SerializedName("")等等都是比較花時間的。

003構(gòu)建
① 創(chuàng)建一個Android工程(當(dāng)然Java工程也是可以的),如圖:

② 將JakeWharton大神的POET代碼移植過來,在工程目錄下創(chuàng)建META-INFO,如上圖提示。
注意:javax.annotation.processing.Processor文件的內(nèi)容是com.king.annotation.KingProcessor (KingProcessor extends AbstractProcessor),因為我們沒有使用@AutoService(Processor.class)注解去自動生成 javax.annotation.processing.Processor,所以想讓eclipse-apt識別到,就需要加入這個文件;大家不凡也可以去看JakeWharton大神的butterknife-7.0.1.jar包,其中也可以看到META-INFO文件夾,只是javax.annotation.processing.Processor的內(nèi)容是大神自己的Processor。

③ 創(chuàng)建注解

這邊只對Class作用所以,Retention就直接使用CLASS類型
④ 創(chuàng)建Processor(DHModelProcessor)
這個類是最重要的類了^_^,其中使用到JakeWharton大神的POET,對POET框架不了解的可以先去熟悉下:javapoet
下面一個個講怎么拼湊:
// 獲取所有被DHModel注解的元素
for (Element element : roundEnv.getElementsAnnotatedWith(DHModel.class)) {
? ? ? ? ? ?DHModel model = element.getAnnotation(DHModel.class); -------------------------拿到注解對象





這里講下需要注意的地方:
<1> 例如我需要拿到一個Class,那么我們需要使用 ClassName,例如取個activity類:
ClassName mActivityClassName = ClassName.get("android.app", "Activity"); // Activity類
<2> $T和$S要對應(yīng)正確,不然會出錯
<3> 巧用mMessager.printMessage(Diagnostic.Kind.ERROR, String.format(msg, args), e);來調(diào)試代碼。
004打包
利用Eclipse---->export打jar包工具,生成jar包

注意:重新打包的時候不要使用覆蓋的方式,否則jar包會出問題,懷疑是編譯器的問題。
005加入jar包
加打完的jar包放入主工程libs目錄中,然后如下圖點擊Add JARs添加jar包:

006萬事俱備
005步驟完成后,使用@DHModel(注解)

最后重新編譯工程,在你設(shè)置的包路徑下會生成對應(yīng)的代碼:

007成果
最終會看到自動生成好了的文件
