日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

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

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

文章目錄

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





一、注解處理器 AbstractProcessor



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

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


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


創建 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) 標注 注解處理器



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

程序構建時 , 發現了 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 方法 , 該方法專門用于注解處理器相關初始化操作 ;

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

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

ProcessingEnvironment 中定義了獲取相關工具的接口 ;

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



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



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

通過 ProcessingEnvironment 可以通過調用 getFiler 方法 , 獲取 Filer 對象 ;

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



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



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

通過調用 ProcessingEnvironment 的 getMessager 方法 , 可以獲取到 Messager 對象 ;

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



六、博客資源



博客源碼 :

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

  • CSDN :

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。