本文是一篇實(shí)踐文章媒熊,主要記錄學(xué)習(xí)注解處理器的實(shí)踐過程奇适,以及在這個(gè)過程中遇到的問題坟比。
目錄:
1、創(chuàng)建注解嚷往;
2葛账、創(chuàng)建注解處理器;
3皮仁、注冊(cè)注解處理器籍琳;
4、應(yīng)用注解贷祈;
5趋急、遇到的問題;
1势誊、創(chuàng)建注解
首先呜达,在項(xiàng)目中新創(chuàng)建一個(gè)”Java Library“ module,專門用來存放注解粟耻,取名為annotation查近。
在module中定義一個(gè)編譯時(shí)注解:
2、創(chuàng)建注解處理器
另創(chuàng)建一個(gè)”Java Library“ module processor用來存放注解處理器挤忙,并讓它依賴剛才創(chuàng)建的annotation module霜威。
附上processor module的gradle配置
其中的javapoet是用來生成Java文件的SDK乙漓。
編寫一個(gè)注解處理器類ClassProcessor笛质,使它繼承AbstractProcessor砚婆。
這里使用注解SupportedAnnotationTypes还蹲,SupportedSourceVersion來替代了getSupportedAnnotationTypes和getSupportedSourceVersion這兩個(gè)方法,并且在init中進(jìn)行了簡(jiǎn)單的初始化种柑。
在process方法中進(jìn)行注解的處理操作疼进,這里通過javapoet生成了一個(gè)Java文件柠偶。
3次哈、注冊(cè)注解處理器
1)在processor庫(kù)的main目錄下新建 resources資源文件夾胎署;
2)在resources中再建立META-INF文件夾吆录;
3)在META-INF下再建立services文件夾窑滞;
4)在services中新建javax.annotation.processing.Processor文件;
5)這個(gè)文件的內(nèi)容就是剛剛新建的注解處理器的名稱恢筝,
比如此處是:com.kaikaili.processor.ClassProcessor
4哀卫、應(yīng)用注解
annotationProcessor project(':processor')
implementation project(':annotation')
至此,注解處理器實(shí)踐完成撬槽。
5此改、遇到的問題
Android Studio 版本號(hào):3.5;Gradle版本號(hào):5.4.1侄柔;Android Gradle插件版本:3.5.0
1)運(yùn)行之后生產(chǎn)的文件不在 generated/apt文件夾下共啃,而在generated/ap_generated_sources下
2)Google開源的AutoService庫(kù)不能正常生產(chǎn)Processor文件占调,導(dǎo)致注解處理失敗,最終采用手動(dòng)創(chuàng)建的方式移剪。
3)META-INF/services 或 META-INF.services不是一個(gè)文件夾的名稱究珊,是兩個(gè)文件夾的名稱。
4)Gradle console在新版的Android studio應(yīng)該是去掉了纵苛,gradle的輸出信息剿涮,可以直接在BuildOutput中查看。
5)Java Source Version使用1.7報(bào)錯(cuò)攻人,統(tǒng)一改成了1.8
Done