【Android 组件化】路由组件 ( 路由组件结构 )
文章目錄
- 一、路由組件原理
- 二、路由組件基本組成
- 三、自定義注解模塊
- 四、注解處理器模塊
- 五、博客資源
一、路由組件原理
在之前博客 【Android 組件化】使用 Gradle 實(shí)現(xiàn)組件化 ( 組件 / 集成模式下的 Library Module 開發(fā) ) 的組件化項(xiàng)目中 , 可能涉及到跨 Module 的調(diào)用 , 如在 library1 模塊中打開 library2 模塊中的 Activity 界面 , 或調(diào)用其它 Module 中的功能 ;
這就需要 library1 Module 中依賴 library2 Module , 但是如果 在 library2 中還要使用 library1 中的功能 , 就無法引用 library1 了 , 否則就會造成循環(huán)引用 , 編譯直接報錯 ;
方法 111 : 可以選擇使用 隱式 Intent , 在清單文件中 , 為組件設(shè)置 action 等意圖過濾器 ;
方法 222 : 這里介紹一種更好的架構(gòu)方式 , 引入 " 路由模塊 " , 所有的 Library Module 依賴庫模塊 和 Application Module 殼應(yīng)用 都依賴 " 路由模塊 " ;
借助 " 路由模塊 " , 可以 使用一個路由地址 , 隨意調(diào)用任意 Module 中的任意功能 , 如 : 跳轉(zhuǎn)到其它 Module 的 Activity 頁面 ;
在 111 個 Activity 中如果要使用路由模塊 , 先初始化路由模塊 , 如果需要頁面跳轉(zhuǎn)時 , 傳入 " 路由地址 ", 跳轉(zhuǎn)到對應(yīng)界面 , " 路由地址 " 是在對應(yīng)的 Activity 類上使用注解設(shè)定的 ;
在 " 路由模塊 " 中 , 維護(hù)了多個分組 , 每個分組維護(hù)一張 路由表 , 其中 包含了需要調(diào)用的 Activity , Service 等組件信息 , 每個組件都有一個路由地址與之對應(yīng) , 路由地址通過類注解進(jìn)行設(shè)置 ;
分組的個數(shù)可以根據(jù)項(xiàng)目需求進(jìn)行分割 , 如果項(xiàng)目特別大 , 產(chǎn)生的路由表就很大 , 每次調(diào)用都要加載整個路由表 , 通過分組拆分需要管理的路由表 , 可以根據(jù)具體的需求 , 選擇對應(yīng)的路由表進(jìn)行加載 ;
二、路由組件基本組成
路由模塊 實(shí)現(xiàn)時 , 需要使用注解 , 通過注解 , 生成對應(yīng) Java 類文件 , 該 Java 文件就是對應(yīng)的 路由表 ;
這種涉及注解以及生成 Java 文件的功能 , 一般分為 333 個模塊進(jìn)行實(shí)現(xiàn) ;
- 模塊 111 : 自定義注解模塊 , 在該模塊下包含所有自定義注解 ; ( Java 工程 )
- 模塊 222 : 注解處理器模塊 , 用于生成 Java 類文件模塊 ; ( Java 工程 )
- 模塊 333 : 項(xiàng)目中引用的依賴庫模塊 , Android 的 Library Module 依賴庫 , 供其它 Android Module 調(diào)用的接口 ; ( Android Library 工程 )
ButterKnife , Dagger2 , EventBus 等注解框架 , 都是用到了編譯時技術(shù) APT ;
三、自定義注解模塊
" 自定義注解模塊 " 是 Java 工程 ;
在 自定義注解模塊 中 , 自定義了注解 , 自定義注解需要傳入一個 字符串 路由路徑 , 用于 標(biāo)識一個 Android 中的組件類 ;
package kim.hsl.router_annotation;import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;@Target({ElementType.TYPE}) @Retention(RetentionPolicy.CLASS) public @interface Route {/*** 路由路徑, 標(biāo)識一個路由節(jié)點(diǎn)* 該字段沒有默認(rèn)值, 必須設(shè)置* @return*/String path();/*** 路由分組, 默認(rèn)為空, 選擇性設(shè)置* 路由節(jié)點(diǎn)可以按照分組進(jìn)行加載* @return*/String group() default ""; }使用注解時 , 需要在類上添加如下注解 , 必須在注解中指定 path 對應(yīng)的值 path = "library1" , 否則編譯報錯 ; 注解中的 group 默認(rèn)為 "" , 不是必須的 , 可以省略 ;
@Route(path = "library1")四、注解處理器模塊
" 注解處理器模塊 " 是 Java 工程 ;
注解處理器模塊 負(fù)責(zé)處理自定義注解 , 需要 自定義 AbstractProcessor 子類 , 該類就是 注解處理器 ;
注解處理器負(fù)責(zé)生成 Java 代碼 , 但是注解處理器本身的代碼是不會打包到 APK 中的 ;
注解處理器注冊的時候自動執(zhí)行 , 即 執(zhí)行注解處理器中的 process 函數(shù) ;
注解處理器首選要進(jìn)行注冊 , 可以使用 Google 提供的自動注冊工具 , 在注解處理器類上使用 @AutoService(Processor.class) 注解即可進(jìn)行自動注冊 ;
package kim.hsl.router_compiler;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 RouterProcessor extends AbstractProcessor {@Overridepublic boolean process(Set<? extends TypeElement> set, RoundEnvironment roundEnvironment) {return false;} }添加 com.google.auto.service:auto-service 依賴庫 ;
implementation 'com.google.auto.service:auto-service:1.0-rc2'添加 自定義注解模塊 依賴庫 :
implementation project(':router-annotation')完整 build.gradle 示配置例 :
plugins {id 'java-library' }java {sourceCompatibility = JavaVersion.VERSION_1_8targetCompatibility = JavaVersion.VERSION_1_8 }dependencies {implementation fileTree(dir: 'libs', include: ['*.jar'])implementation project(path: ':router-annotation')annotationProcessor 'com.google.auto.service:auto-service:1.0-rc4'compileOnly 'com.google.auto.service:auto-service:1.0-rc4' }注冊 Google 服務(wù)后的效果 :
下一篇博客 , 講解注解處理器的開發(fā) ;
五、博客資源
博客源碼 :
- GitHub : https://github.com/han1202012/Component
- CSDN 下載 :
總結(jié)
以上是生活随笔為你收集整理的【Android 组件化】路由组件 ( 路由组件结构 )的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Android 组件化】使用 Grad
- 下一篇: 【Java 注解】注解简介及作用