TheRouter是货拉拉开源的路由框架,针对 Android 平台实现组件化、跨模块调用、动态化等功能的集成框架,基本上算当前最先进的路由库了。
Github: https://github.com/HuolalaTech/hll-wp-therouter-android/
官网:http://therouter.cn/
如果你的项目之前使用过其他路由,建议使用迁移工具一键迁移: https://therouter.cn/docs/2022/09/05/01
如果你的是新项目,请继续往下看接入步骤。
TheRouter 的版本分为两种,稳定版和 rc版,一般不追求新功能我们就用稳定版就行,可以在官网看到最新的版本号和各种版本的说明:https://therouter.cn/docs/2022/09/06/01
新建一个Demo
工程,打开Demo
的根目录build.gradle
。
如果是新版本的Gradle,classpath
已经改为用plugins
的方式引入,只需要在闭包内加这一句就行了
id 'cn.therouter' version '1.1.4-rc2' apply false
对于老版本的Gradle,需要手动引入classpath
,在TheRouter官方Github首页也有接入介绍
classpath "cn.therouter:plugin:1.1.4-rc2"
找到项目里全部的app模块(一般只会有一个,特殊项目会有多个)。也就是整个工程的所有build.gradle
文件里面,只要是有com.android.application
这个的模块,都要加上如下代码
// 老版本这样写
apply plugin: 'therouter'
// 新版本这样写
id 'therouter'
新版本的 Gradle 这样配置
(被注释掉的那个就是kapt插件,这里我是用了更先进的ksp)
老版本的 Gradle 这样配置
TheRouter的注解处理依赖kapt执行,所以要在项目里面手动引入,否则无法处理注解
注:所有的模块都必须引入kapt,否则就有可能造成某些路由表不生成。
注:所有APP的模块,如果是需要上线的模块,必须直接或间接在 app 中被依赖,否则最终生成apk会丢失未被依赖的功能。
如果报找不到kapt,可能是因为没有引入kotlin-kapt的插件,参考步骤3里面的截图,接入对应的kapt。如果是纯Java工程,需要用Java的APT处理,APT就不用引入插件了,直接把kapt
改成annotationProcessor
annotationProcessor "cn.therouter:apt:1.1.4-rc2"
给需要跳转的页面加上路由表声明
@Route(path = "http://therouter.com/home")
public class HomeActivity extends BaseActivity {
}
这一步如果在base里面写了的话就不用每个Activity都加了。
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TheRouter.inject(this);
}
也就是原来使用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 从 7.X 开始,把 TransfromAPI
废弃(会有警告,但还能正常使用),从 8.0 开始删除了,所以老版本是无法使用的。对于新版本,由于 8.0 的 AGP 还没有正式发布,所以我们也只在 Beta 版本支持,以防止再有什么 API 变动。
具体版本号及开发进度请参考:Issue 22
详细接入文档也可以查看这一篇:https://therouter.cn/docs/2023/05/15/01
KSP 依赖Gradle7.X,所以需要把 Gradle 版本号跟 AGP 版本号都升级到最新。
比如我的版本号是这样的(项目目录/gradle/wrapper/gradle-wrapper.properties)
AGP我用的是 8.0 的,根目录build.gradle
中插件列表
由于新版本的Gradle强制要求最新版本的Android Studio Preview
,并且必须Java11
编译,所以还得要下载最新的AS预览版,并修改编译环境。
根目录build.gradle
中,插件列表闭包内引入KSP
插件依赖
所有模块都要加上KSP插件的声明,否则会提示找不到KSP工具。
在所有模块的dependencies
闭包内,引入therouter的依赖,需要注意的是,所有模块都要引入ksp "cn.therouter:apt:1.1.3-beta1"
,不能只在最底层模块引入ksp。
(下面的 implementation 可以只在最底层引入,上传传递依赖)。