Android APT:Eclipse下APT使用

001概述

文章將介紹如何在eclipse下使用apt開發(fā),結(jié)合JakeWharton大神的javapoet讓apt開發(fā)飛起來。

002背景

栗子:同一個父類,子類繼承完后,每次都要拷貝黏貼,然后重寫,時間花得太不值(⊙o⊙)…

同樣的還有創(chuàng)建{實體類}的時候,需要get、set,使用gson的時候還要@SerializedName("")等等都是比較花時間的。

圖1

003構(gòu)建

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

工程結(jié)構(gòu)

② 將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); -------------------------拿到注解對象

生成getURL方法,$T和$S分別對應(yīng)類和字符串,重點就是這個renturn了,最后生成圖1中的getURL方法
同樣生成getType()、getClazz()、saveJsonType()方法
用了一個for循環(huán)控制了請求參數(shù),生成doNet方法
這個生成Class,其中添加了一個構(gòu)造函數(shù),然后將所有的方法加入到這個Class構(gòu)造器中
輸出文件^_^

這里講下需要注意的地方

<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包

注意:重新打包的時候不要使用覆蓋的方式,否則jar包會出問題,懷疑是編譯器的問題。

005加入jar包

加打完的jar包放入主工程libs目錄中,然后如下圖點擊Add JARs添加jar包:

006萬事俱備

005步驟完成后,使用@DHModel(注解)

注解使用

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

【定義文件路徑】中找到對應(yīng)生成的代碼

007成果

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

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

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

  • 本文章涉及代碼已放到github上annotation-study 1.Annotation為何而來 What:A...
    zlcook閱讀 29,758評論 15 116
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,654評論 19 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,281評論 6 342
  • 整體Retrofit內(nèi)容如下: 1、Retrofit解析1之前哨站——理解RESTful 2、Retrofit解析...
    隔壁老李頭閱讀 8,829評論 4 31
  • 前面寫了Android 開發(fā):由模塊化到組件化(一),很多小伙伴來問怎么沒有Demo啊?之所以沒有立刻放demo的...
    涅槃1992閱讀 8,222評論 4 37

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