从零接入 TheRouter


TheRouter是货拉拉开源的路由框架,针对 Android 平台实现组件化、跨模块调用、动态化等功能的集成框架,基本上算当前最先进的路由库了。
Github: https://github.com/HuolalaTech/hll-wp-therouter-android/
官网:http://therouter.cn/

开始之前

如果你的项目之前使用过其他路由,建议使用迁移工具一键迁移: https://therouter.cn/docs/2022/09/05/01

如果你的是新项目,请先记住一点:plugin、apt、router 三个依赖的版本号必须保持一致,请继续往下看接入步骤。

查看最新版本

TheRouter 的版本分为两种,稳定版和 rc版,一般不追求新功能我们就用稳定版就行,可以在官网看到最新的版本号和各种版本的说明:https://therouter.cn/docs/2022/09/06/01

接入

新建一个Demo工程,打开Demo的根目录build.gradle

第一步:接入classpath

8.X 版本 Gradle

由于 8.X 版本的 Gradle,必须使用Java 17的环境了,并且不兼容老JDK编译的class,所以对于新版本需要使用专为Java 17编译的插件。

id 'cn.therouter.agp8' version '1.2.1' apply false

7.X 版本 Gradle

7.X 的 Gradle,classpath已经改为用plugins的方式引入,只需要在闭包内加这一句就行了

id 'cn.therouter' version '1.2.2' apply false

6.x 及之前的老版本 Gradle

对于6.x 及之前的 Gradle,需要手动引入classpath,在 TheRouter 官方 Github 首页也有接入介绍

classpath "cn.therouter:plugin:1.2.2"

第二步:引入插件

7.X 及以后版本 Gradle

找到项目里全部的app模块(一般只会有一个,特殊项目会有多个)。也就是整个工程的所有build.gradle文件里面,只要是有com.android.application这个的模块,都要加上如下代码

// 7.X及以上新版本这样写
id 'therouter'

6.x 及之前的老版本 Gradle

找到项目里全部的app模块(一般只会有一个,特殊项目会有多个)。也就是整个工程的所有build.gradle文件里面,只要是有com.android.application这个的模块,都要加上如下代码

// 6.X及以下老版本这样写
apply plugin: 'therouter'

第三步:引入注解处理器

最新版的 TheRouter 已经支持KSP解析,如果你都不知道KSP是什么,那么就继续往下看,使用kapt吧。如果你希望使用KSP,可以看文档:使用 KSP 处理注解

TheRouter 的注解处理依赖kapt执行,所以要在项目里面手动引入,否则无法处理注解。

注:所有的模块都必须引入kapt,否则就有可能造成某些路由表不生成。
注:所有APP的模块,如果是需要上线的模块,必须直接或间接在 app 中被依赖,否则最终生成apk会丢失未被依赖的功能。

如果报找不到kapt,可能是因为没有声明kotlin-kapt的插件,参考步骤二里面的截图,接入对应的kapt。
如果是纯Java工程,需要用Java的APT处理,纯Java就不用声明kotlin-kapt插件了,直接把kapt改成annotationProcessor

annotationProcessor "cn.therouter:apt:1.2.2"

第四步:引入路由库

在需要使用路由功能的模块的build.gradle,(不像kapt,这个是可以使用传递依赖的),加入如下依赖

dependencies {
    implementation "cn.therouter:router:1.2.2"
}

使用

1. 声明路由

给需要跳转的页面加上路由表声明

@Route(path = "http://therouter.com/home")
public class HomeActivity extends BaseActivity {
}

2. 添加参数注入

这一步如果在base里面写了的话就不用每个Activity都加了。

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    TheRouter.inject(this);
}

3. 发起跳转

也就是原来使用startActivity()的方法,都可以改成这样使用了

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    TheRouter.build("要跳转的目标页Path")
        .withInt("intValue", 12345678) 
        .withString("str_123_Value", "传中文字符串")
        .withBoolean("boolValue", true)
        .withLong("longValue", 123456789012345L)
        .withChar("charValue", 'c')
        .withDouble("double", 3.14159265358972)
        .withFloat("floatValue", 3.14159265358972F)
        .navigation();
        
    TheRouter.build("如果没有参数,可以什么都不传").navigation();
}

AGP 8.X 使用

从1.2.1开始,beta版本已经全部合入rc版本,无需再特殊关注beta版本进度。

使用时只需注意本文第一步中,classpath引入的不同,需要使用cn.therouter.agp8引入插件。

相关推荐:

为 TheRouter 的 AGP8 编译加个速为 TheRouter 的 AGP8 编译加个速

内容请见: 《为 TheRouter 的 AGP8 编译加个速》 [https://kymjs.com/code/2024/10/31/01/](...

1 mins
1.2.3版本编译改动1.2.3版本编译改动

从`1.2.3-rc1`版本开始,我们对`TheRouter`编译过程做了大量优化,同时适配了`Gradle`的`4.x-8.x`全部版本,理论上更新的版本或更老的版本也能支持,只是没有去测试。

3 mins
TheRouterSwift iOS 路由介绍TheRouterSwift iOS 路由介绍

TheRouterSwift是货拉拉TheRouter系列开源框架的Swift版本,为日益增多的Swift开发者提供一高可用路由框架。TheRouterSwift用于模块间解耦和通信,基于Swift协议进行动态懒加载注册路由与打开路由的工具。同时支持通过Service-Protocol寻找对应的模块,并用 protocol进行依赖注入和模块通信。

16 mins