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

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

主站蜘蛛池模板: 久久久久久综合网 | 亚洲黄业 | 亚洲自拍偷拍一区二区三区 | 国产精品亚洲色图 | 黄色三级视频在线观看 | 美女狂揉羞羞的视频 | 欧美日韩国产免费一区二区三区 | 日韩精品1区2区3区 欧美一本 | 你懂的在线视频网站 | 欧美高清一区二区三区四区 | 国产乱人伦精品 | 少妇与公做了夜伦理69 | 日韩电影中文字幕在线观看 | 黄色一级片免费看 | 超碰黄色 | 真人抽搐一进一出视频 | 天天操夜夜操视频 | 天天黄色片 | 色视频导航 | 激情综合网五月激情 | 久久久精品日本 | 久久3p | 欧美欧美欧美欧美 | 中文字幕不卡在线观看 | 日本老小玩hd老少配 | 伊人精品在线视频 | 国产成人小视频在线观看 | 高清欧美性猛交 | 国产精自产拍久久久久久蜜 | av污在线观看 | 久久99久 | 久久偷拍免费视频 | 国产一级特黄 | 日韩福利在线观看 | 亚洲人在线观看视频 | 日本a级片在线播放 | 日韩一区二区三区中文字幕 | 在线观看欧美一区二区 | 成人深夜在线观看 | 在线免费观看av的网站 | av一起看香蕉 | 91在线一区 | 国产三区在线观看 | 欧美视频a | 在线激情网站 | 99热在线免费 | 91快射 | 成人一区二区视频 | caoporen在线 | 欧洲丰满少妇做爰 | 国产精品露脸视频 | 樱花视频在线免费观看 | 国产人妻777人伦精品hd | 日日夜夜狠狠干 | 欧美性粗暴| 亚洲综合视频网站 | 秋霞亚洲 | 巨胸喷奶水www久久久免费动漫 | av网站有哪些 | 超碰国产一区二区三区 | 免费一级suv好看的国产网站 | 婷婷激情五月网 | 欧美成人手机在线视频 | 香蕉视频亚洲一级 | 一级绝黄 | 欧美激情第五页 | 中文字幕电影一区 | 国产又粗又猛又黄 | 久草超碰| 欧美r级在线 | 久久亚洲成人av | 亚洲色成人www永久在线观看 | 成人免费看片&#39; | 亚洲宅男天堂 | 秋霞免费av | 久色影视 | www.97ai.com| 欧美三级韩国三级日本三斤在线观看 | 久久国产夫妻 | 欧美xxxx18 | 黑人精品欧美一区二区蜜桃 | 黄网站在线播放 | www.国产成人| 草草影院网址 | 天天性综合 | 在线人成 | 欧美日韩一区二区三区四区五区六区 | 天天干狠狠爱 | 欧美日韩精品一区 | 亚洲AV成人无码久久精品同性 | 偷自在线 | 久久99精品久久久水蜜桃 | 99热超碰在线 | 国产一级爱c视频 | 毛片久久久久久久 | 天天看天天摸 | 国产特黄 | 亚洲综合一 | 日本中文字幕一区 |