日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

【Android APT】注解处理器 ( 注解标注 与 初始化方法 )

發(fā)布時間:2025/6/17 Android 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Android APT】注解处理器 ( 注解标注 与 初始化方法 ) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

  • 一、注解處理器 AbstractProcessor
  • 二、使用注解 @AutoService(Processor.class) 標注 注解處理器
  • 三、注解處理器 init 初始化方法
  • 四、注解處理器 Filer 代碼生成工具
  • 五、注解處理器 Messager 日志打印工具
  • 六、博客資源





一、注解處理器 AbstractProcessor



上一篇博客 【Android APT】編譯時技術(shù) ( 開發(fā)編譯時注解 ) 中 開發(fā) 了 annotation 編譯時注解 依賴庫 , 很簡單 , 只有一個 BindView 注解 ;

本博客開始進行開發(fā) 注解處理器 依賴庫 ;


在 【Android APT】編譯時技術(shù) ( 編譯時注解 和 注解處理器 依賴庫 ) 博客中創(chuàng)建了 annotation-compiler 注解處理器 依賴庫 , 基于該基礎(chǔ)開發(fā) 注解處理器 ;


創(chuàng)建 Compiler 注解處理器 , 該類主要作用是生成代碼 , 注解處理器類必須繼承 javax.annotation.processing.AbstractProcessor 類 , 這是 Java 的 API , 再 Android 中無法獲取該 API , 因此 編譯時注解 和 注解處理器 都必須是 Java 依賴庫 ;

package kim.hsl.annotation_compiler;import java.util.Set;import javax.annotation.processing.AbstractProcessor; import javax.annotation.processing.RoundEnvironment; import javax.lang.model.element.TypeElement;/*** 生成代碼的注解處理器*/ public class Compiler extends AbstractProcessor {@Overridepublic boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {return false;} }



二、使用注解 @AutoService(Processor.class) 標注 注解處理器



上述實現(xiàn)的 AbstractProcessor 中的 process 方法 , 專門用于搜索 Android 源碼中使用的 編譯時注解 的方法 ;

程序構(gòu)建時 , 發(fā)現(xiàn)了 annotationProcessor project(path: ':annotation-compiler') 依賴 , 使用 annotationProcessor 進行依賴 , 說明這是一個注解處理器 , 此時會到 annotation-compiler 模塊中查找 注解處理器 , 注解處理器 的查找方式也是 通過 注解 標記 進行查找 , 該注解是 Google 服務庫提供的 ;


如果要使用 注解 標記注解處理器 , 首先要依賴 Google 服務庫 ,

dependencies {implementation fileTree(dir: 'libs', include: ['*.jar'])annotationProcessor 'com.google.auto.service:auto-service:1.0-rc4'compileOnly 'com.google.auto.service:auto-service:1.0-rc3' }

然后到 public class Compiler extends AbstractProcessor 注解處理器類上使用 @AutoService(Processor.class) 標注 , Android 編譯器通過查找該注解 , 確定哪個類是注解處理器 ;

import com.google.auto.service.AutoService; import java.util.Set; import javax.annotation.processing.AbstractProcessor; import javax.annotation.processing.Processor; import javax.annotation.processing.RoundEnvironment; import javax.lang.model.element.TypeElement;/*** 生成代碼的注解處理器*/ @AutoService(Processor.class) public class Compiler extends AbstractProcessor {@Overridepublic boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {return false;} }



三、注解處理器 init 初始化方法



AbstractProcessor 注解處理器中 , 專門提供了一個 init 方法 , 該方法專門用于注解處理器相關(guān)初始化操作 ;

@Override public synchronized void init(ProcessingEnvironment processingEnv) {super.init(processingEnv); }

init 方法的 ProcessingEnvironment processingEnv 參數(shù)很重要 , 通過該參數(shù)可以獲取 注解處理器中的各種重要工具 ;

ProcessingEnvironment 中定義了獲取相關(guān)工具的接口 ;

public interface ProcessingEnvironment {Map<String,String> getOptions();Messager getMessager();Filer getFiler();Elements getElementUtils();Types getTypeUtils();SourceVersion getSourceVersion();Locale getLocale(); }



四、注解處理器 Filer 代碼生成工具



通過注解生成 Java 代碼需要使用 Filer 對象 , 將該對象定義到 注解處理器 成員變量中 , 在 init 方法中進行初始化操作 ;

通過 ProcessingEnvironment 可以通過調(diào)用 getFiler 方法 , 獲取 Filer 對象 ;

/*** 生成 Java 代碼對象*/private Filer mFiler;/*** 初始化注解處理器相關(guān)工作* @param processingEnv*/@Overridepublic synchronized void init(ProcessingEnvironment processingEnv) {super.init(processingEnv);this.mFiler = processingEnv.getFiler();}



五、注解處理器 Messager 日志打印工具



注解處理器中不能打斷點進行調(diào)試 , 也不能使用 Log , System.out 打印日志 , 在注解處理器中只能通過 Messager 打印日志 ;

通過調(diào)用 ProcessingEnvironment 的 getMessager 方法 , 可以獲取到 Messager 對象 ;

/*** 日志打印*/private Messager mMessager;/*** 初始化注解處理器相關(guān)工作* @param processingEnv*/@Overridepublic synchronized void init(ProcessingEnvironment processingEnv) {super.init(processingEnv);this.mMessager = processingEnv.getMessager();}



六、博客資源



博客源碼 :

  • GitHub : https://github.com/han1202012/APT

  • CSDN :

總結(jié)

以上是生活随笔為你收集整理的【Android APT】注解处理器 ( 注解标注 与 初始化方法 )的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。