【Android 组件化】路由组件 ( 路由组件结构 )

简介: 【Android 组件化】路由组件 ( 路由组件结构 )

文章目录

一、路由组件原理

二、路由组件基本组成

三、自定义注解模块

四、注解处理器模块

五、博客资源





一、路由组件原理


在之前博客 【Android 组件化】使用 Gradle 实现组件化 ( 组件 / 集成模式下的 Library Module 开发 ) 的组件化项目中 , 可能涉及到跨 Module 的调用 , 如在 library1 模块中打开 library2 模块中的 Activity 界面 , 或调用其它 Module 中的功能 ;


这就需要 library1 Module 中依赖 library2 Module , 但是如果 在 library2 中还要使用 library1 中的功能 , 就无法引用 library1 了 , 否则就会造成循环引用 , 编译直接报错 ;



方法 1 11 : 可以选择使用 隐式 Intent , 在清单文件中 , 为组件设置 action 等意图过滤器 ;


方法 2 22 : 这里介绍一种更好的架构方式 , 引入 " 路由模块 " , 所有的 Library Module 依赖库模块 和 Application Module 壳应用 都依赖 " 路由模块 " ;


借助 " 路由模块 " , 可以 使用一个路由地址 , 随意调用任意 Module 中的任意功能 , 如 : 跳转到其它 Module 的 Activity 页面 ;



在 1 11 个 Activity 中如果要使用路由模块 , 先初始化路由模块 , 如果需要页面跳转时 , 传入 " 路由地址 ", 跳转到对应界面 , " 路由地址 " 是在对应的 Activity 类上使用注解设定的 ;



在 " 路由模块 " 中 , 维护了多个分组 , 每个分组维护一张 路由表 , 其中 包含了需要调用的 Activity , Service 等组件信息 , 每个组件都有一个路由地址与之对应 , 路由地址通过类注解进行设置 ;


分组的个数可以根据项目需求进行分割 , 如果项目特别大 , 产生的路由表就很大 , 每次调用都要加载整个路由表 , 通过分组拆分需要管理的路由表 , 可以根据具体的需求 , 选择对应的路由表进行加载 ;






二、路由组件基本组成


路由模块 实现时 , 需要使用注解 , 通过注解 , 生成对应 Java 类文件 , 该 Java 文件就是对应的 路由表 ;


这种涉及注解以及生成 Java 文件的功能 , 一般分为 3 33 个模块进行实现 ;


模块 1 11 : 自定义注解模块 , 在该模块下包含所有自定义注解 ; ( Java 工程 )

模块 2 22 : 注解处理器模块 , 用于生成 Java 类文件模块 ; ( Java 工程 )

模块 3 33 : 项目中引用的依赖库模块 , Android 的 Library Module 依赖库 , 供其它 Android Module 调用的接口 ; ( Android Library 工程 )

ButterKnife , Dagger2 , EventBus 等注解框架 , 都是用到了编译时技术 APT ;






三、自定义注解模块


" 自定义注解模块 " 是 Java 工程 ;


在 自定义注解模块 中 , 自定义了注解 , 自定义注解需要传入一个 字符串 路由路径 , 用于 标识一个 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 {
    /**
     * 路由路径, 标识一个路由节点
     * 该字段没有默认值, 必须设置
     * @return
     */
    String path();
    /**
     * 路由分组, 默认为空, 选择性设置
     * 路由节点可以按照分组进行加载
     * @return
     */
    String group() default "";
}


使用注解时 , 需要在类上添加如下注解 , 必须在注解中指定 path 对应的值 path = "library1" , 否则编译报错 ; 注解中的 group 默认为 "" , 不是必须的 , 可以省略 ;


@Route(path = "library1")

@Route(path = "library1")






四、注解处理器模块


" 注解处理器模块 " 是 Java 工程 ;


注解处理器模块 负责处理自定义注解 , 需要 自定义 AbstractProcessor 子类 , 该类就是 注解处理器 ;


注解处理器负责生成 Java 代码 , 但是注解处理器本身的代码是不会打包到 APK 中的 ;


注解处理器注册的时候自动执行 , 即 执行注解处理器中的 process 函数 ;


注解处理器首选要进行注册 , 可以使用 Google 提供的自动注册工具 , 在注解处理器类上使用 @AutoService(Processor.class) 注解即可进行自动注册 ;


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 {
    @Override
    public 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_8
    targetCompatibility = 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 服务后的效果 :




image.png

下一篇博客 , 讲解注解处理器的开发 ;






五、博客资源


博客源码 :


GitHub : https://github.com/han1202012/Component

CSDN 下载 :


目录
相关文章
|
2月前
|
设计模式 Android开发
[Android 四大组件] --- BroadcastReceiver
[Android 四大组件] --- BroadcastReceiver
33 0
|
3月前
|
Android开发 开发者
什么是Android Jetpack,它包括哪些组件?
什么是Android Jetpack,它包括哪些组件?
41 0
|
4月前
|
数据库 Android开发
Android Studio开发之应用组件Application的讲解及实战(附源码,通过图书管理信息系统实战)
Android Studio开发之应用组件Application的讲解及实战(附源码,通过图书管理信息系统实战)
51 0
|
4月前
|
Java 关系型数据库 数据库
Android App连接真机步骤与APP的开发语言和工程结构讲解以及运行实例(超详细必看)
Android App连接真机步骤与APP的开发语言和工程结构讲解以及运行实例(超详细必看)
36 0
|
4月前
|
XML Java Android开发
Android Studio开发之使用内容组件Content获取通讯信息讲解及实战(附源码 包括添加手机联系人和发短信)
Android Studio开发之使用内容组件Content获取通讯信息讲解及实战(附源码 包括添加手机联系人和发短信)
82 0
|
12天前
|
存储 数据库 Android开发
构建高效安卓应用:采用Jetpack架构组件优化用户体验
【4月更文挑战第12天】 在当今快速发展的数字时代,Android 应用程序的流畅性与响应速度对用户满意度至关重要。为提高应用性能并降低维护成本,开发者需寻求先进的技术解决方案。本文将探讨如何利用 Android Jetpack 中的架构组件 — 如 LiveData、ViewModel 和 Room — 来构建高质量的安卓应用。通过具体实施案例分析,我们将展示这些组件如何协同工作以实现数据持久化、界面与逻辑分离,以及确保数据的即时更新,从而优化用户体验并提升应用的可维护性和可测试性。
|
2月前
|
算法 数据库 Android开发
安卓逆向 -- APK文件结构
安卓逆向 -- APK文件结构
21 0
|
2月前
|
数据可视化 Android开发
[Android 四大组件] --- Service
[Android 四大组件] --- Service
24 0
|
2月前
|
Android开发
[Android 四大组件] --- Activity
[Android 四大组件] --- Activity
22 1
|
2月前
|
存储 数据库 Android开发
安卓四大组件是什么?
安卓四大组件是什么?