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

歡迎訪問 生活随笔!

生活随笔

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

Android

【Android 组件化】路由组件 ( 注解处理器参数选项设置 )

發布時間:2025/6/17 Android 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Android 组件化】路由组件 ( 注解处理器参数选项设置 ) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 一、注解處理器 接收參數設置
  • 二、注解處理器 生成路由表 Java 代碼
  • 三、博客資源

組件化系列博客 :

  • 【Android 組件化】從模塊化到組件化
  • 【Android 組件化】使用 Gradle 實現組件化 ( Gradle 變量定義與使用 )
  • 【Android 組件化】使用 Gradle 實現組件化 ( 組件模式與集成模式切換 )
  • 【Android 組件化】使用 Gradle 實現組件化 ( 組件 / 集成模式下的 Library Module 開發 )
  • 【Android 組件化】路由組件 ( 路由組件結構 )
  • 【Android 組件化】路由組件 ( 注解處理器獲取被注解的節點 )
  • 【Android 組件化】路由組件 ( 注解處理器中使用 JavaPoet 生成代碼 )

在 【Android 組件化】路由組件 ( 注解處理器中使用 JavaPoet 生成代碼 ) 博客中在注解處理器中 , 簡單的使用了 JavaPoet 生成了 Java 代碼 ;

本篇博客中講解 " 注解處理器 " 后續開發 , 在 build.gradle 構建腳本中設置參數 , 并在注解處理器中獲取該參數 ;





一、注解處理器 接收參數設置



注解處理器只能是 Java 依賴庫 Module , 因為 注解處理器 需要繼承 javax.annotation.processing.AbstractProcessor 抽象類 , 該類在 javax 包中 , Android 中是沒有該包的 ;


注解處理器參數選項 :

注解處理器 可以接受外部參數 , 這些參數可以在 build.gradle 構建腳本中設置 ;

在注解處理器類上使用 @SupportedOptions 注解 , 設置注解處理器接收的參數 ;

// 注解處理器接收的參數 @SupportedOptions("moduleName") public class RouterProcessor extends AbstractProcessor { }

SupportedOptions 注解傳入一個字符串數組 , 也可以選擇傳入一個字符串參數 ;

@Documented @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) public @interface SupportedOptions {String[] value(); }

該參數在 app 主應用 Module 的 build.gradle 中設置 , 在 " android / defaultConfig " 層級下 , 設置 javaCompileOptions 選項 , 這是 Java 編譯選項 , 設置其 注解處理器選項 annotationProcessorOptions 的 arguments 參數 ;

這里設置的參數作用是用于拼接生成 Java 源碼的類名 ;

這里設置的 moduleName 參數就是工程名 project.getName() ;

android {defaultConfig {javaCompileOptions {annotationProcessorOptions {arguments = [moduleName: project.getName()]}}} }

打印獲取的參數 : 在 init 方法中 , 調用 ProcessingEnvironment processingEnvironment 參數的 getOptions 方法獲取參數設置 Map 集合 , 然后獲取其 “moduleName” 鍵對應的值 , 使用 Messager 將其在編譯時打印出來 ;

// 獲取 moduleName 參數 // 先獲取 注解處理器 選項 Map<String, String> options = processingEnvironment.getOptions(); if (options != null){mModuleName = options.get("moduleName");mMessager.printMessage(Diagnostic.Kind.NOTE, "打印 moduleName 參數 : " + mModuleName); }



二、注解處理器 生成路由表 Java 代碼



注解處理器完整代碼 :

package kim.hsl.router_compiler;import com.google.auto.service.AutoService; import com.squareup.javapoet.JavaFile; import com.squareup.javapoet.MethodSpec; import com.squareup.javapoet.TypeSpec;import java.io.IOException; import java.util.Map; import java.util.Set;import javax.annotation.processing.AbstractProcessor; import javax.annotation.processing.Filer; import javax.annotation.processing.Messager; import javax.annotation.processing.ProcessingEnvironment; import javax.annotation.processing.Processor; import javax.annotation.processing.RoundEnvironment; import javax.annotation.processing.SupportedAnnotationTypes; import javax.annotation.processing.SupportedOptions; import javax.annotation.processing.SupportedSourceVersion; import javax.lang.model.SourceVersion; import javax.lang.model.element.Element; import javax.lang.model.element.Modifier; import javax.lang.model.element.TypeElement; import javax.lang.model.util.Elements; import javax.lang.model.util.Types; import javax.tools.Diagnostic;import kim.hsl.router_annotation.Route;// 注解處理器接收的參數 @SupportedOptions("moduleName") // 自動注冊注解處理器 @AutoService(Processor.class) // 支持的注解類型 @SupportedAnnotationTypes({"kim.hsl.router_annotation.Route"}) // 支持的 Java 版本 @SupportedSourceVersion(SourceVersion.RELEASE_8) public class RouterProcessor extends AbstractProcessor {/*** 注解處理器中使用 Messager 對象打印日志*/private Messager mMessager;/*** 用于寫出生成的 Java 代碼*/private Filer mFiler;/*** 注解節點工具*/private Elements mElementUtils;/*** 類工具*/private Types mTypeUtils;/*** 獲取的 moduleName 參數*/private String mModuleName;/*** 該函數在初始化時調用 , 相當于構造函數* @param processingEnvironment*/@Overridepublic synchronized void init(ProcessingEnvironment processingEnvironment) {super.init(processingEnvironment);// 獲取打印日志接口this.mMessager = processingEnvironment.getMessager();// 測試日志打印mMessager.printMessage(Diagnostic.Kind.NOTE, "Messager Print Log");this.mFiler = processingEnvironment.getFiler();this.mElementUtils = processingEnvironment.getElementUtils();this.mTypeUtils = processingEnvironment.getTypeUtils();// 獲取 moduleName 參數// 先獲取 注解處理器 選項Map<String, String> options = processingEnvironment.getOptions();if (options != null){mModuleName = options.get("moduleName");mMessager.printMessage(Diagnostic.Kind.NOTE, "打印 moduleName 參數 : " + mModuleName);}}/*** 該函數在注解處理器注冊時自動執行, 是處理注解的核心函數** Set<? extends TypeElement> set 參數 : 該集合表示使用了相關注解的節點的集合** @param set* @param roundEnvironment* @return*/@Overridepublic boolean process(Set<? extends TypeElement> set, RoundEnvironment roundEnvironment) {return false;} }

編譯執行結果 : 打印出的 moduleName 參數為 app ;

: Messager Print Log 注: 打印 moduleName 參數 : app 注: SupportedAnnotationTypes : kim.hsl.router_annotation.Route





三、博客資源



博客源碼 :

  • GitHub : https://github.com/han1202012/Component
  • CSDN 下載 :


總結

以上是生活随笔為你收集整理的【Android 组件化】路由组件 ( 注解处理器参数选项设置 )的全部內容,希望文章能夠幫你解決所遇到的問題。

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