日韩性视频-久久久蜜桃-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 组件化】路由组件 ( 注解处理器参数选项设置 )的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 魔女鞋交玉足榨精调教 | 性欧美精品男男 | 亚洲AV无码国产精品 | 久久国产精品网站 | 91高清视频在线观看 | 成人毛片av | 成年人激情网 | 国产福利社 | 波多野结衣av片 | 免费毛片网 | 夜夜骑夜夜操 | 久久久久久高清 | 好大好舒服视频 | 男人天堂亚洲 | 操少妇视频 | 欧美顶级metart裸体全部自慰 | av青青草原 | 久久婷婷影院 | 二区三区偷拍浴室洗澡视频 | 久久久久久黄色 | 亚洲毛片一区 | 精品国产乱子伦一区二区 | 免费三片在线视频 | 国产性生活一级片 | 国产精品日韩专区 | 91激情网| 国产三级视频在线播放 | www三级免费 | 国产精品区一区二区三 | 婷婷亚洲综合五月天小说 | 粉嫩av一区二区三区免费观看 | av免费在线网站 | 亚洲AV成人精品 | 欧美美女在线 | 国产九色 | 九九国产 | 国产视频在线免费观看 | 男人天堂网在线观看 | 丰满秘书被猛烈进入高清播放在 | 黑人三级视频 | 麻豆视频观看 | 一区二区三区视频在线播放 | 午夜剧场免费观看 | 淫僧荡尼巨乳(h)小说 | 亚洲精品自拍 | 一本色道久久hezyo加勒比 | 久久久久一级片 | 国产一区色 | 亚洲欧洲视频在线观看 | 啪啪福利社 | 中文字幕在线导航 | 日批毛片 | 色综合久久av | 操操操网| 99视频国产精品免费观看a | 9·1·黄·色·视·频 | 成人区视频 | 中文字幕第88页 | 久操福利在线 | 一区小视频 | 免费一区二区视频 | 国产不卡一 | 国产综合视频在线 | av图片在线 | 黄瓜视频成人 | 精品国产乱码久久久久久影片 | 人人干av| 日批在线| 福利姬在线观看 | 日日躁夜夜躁白天躁晚上躁91 | 亚洲免费视频网站 | chinese精品自拍hd | 亚洲综合a| 国产日韩成人内射视频 | 亚洲九色| 向日葵视频在线 | 庆余年三 | 国产一区二区三区四区hd | 亚洲影库 | 成人免费观看网址 | ww黄色| youjizz.com在线观看 | 麻豆tube| 色臀 | 久久久久免费视频 | 欧美三级午夜理伦三级 | 黄色.com| 欧美日本韩国一区 | 2019狠狠干| 亚洲免费a| 日韩欧美一区二区在线观看 | 办公室大战高跟丝袜秘书经理ol | 五月婷婷色丁香 | 亚洲天堂国产精品 | 久草成人在线 | 激情文学久久 | 黑人玩弄人妻一区二 | 老司机性视频 | 中文人妻熟妇乱又伦精品 |