URouter
看到 AGP8 的transform字节码方式的改变,对 注解处理和路由的原理研究后,
出于兴趣 实现了一个支持AGP8的路由框架:
URouter: https://github.com/classops/URouter
功能
- 支持 AGP8
- @Param 参数注入,支持 setter 参数设置(kotlin属性)
- 支持ActivityResult方式,启动和处理返回结果
- 路由拦截处理
- 路由回调
- Parcelable Serialization Array 参数的序列化
- Uri 方式解析
- 支持增量编译
使用方法
- 项目顶级build.gradle添加
plugins {
id 'com.android.application' version '7.1.1' apply false
id 'com.android.library' version '7.1.1' apply false
id 'io.github.classops.urouter' version '1.0.1' apply false
}
- app模块的build.gradle添加插件和依赖:
plugins {
id "kotlin-kapt"
id 'io.github.classops.urouter'
}
dependencies {
kapt "io.github.classops.urouter:router-compiler:1.0.1"
implementation "io.github.classops.urouter:router:1.0.1"
}
- 项目中使用
// Application 里初始化
Router.get().init(this)
// 在需要路由的 Activity/Fragment 上添加注解
@Route(path = "/test")
// 跳转方法
Router.get().build("/test")
.withString("toast", "hello world")
.navigate(this)
URouter 支持 ActivityResult 方式 跳转页面处理结果
private lateinit var launcher: ActivityResultLauncher<UriRequest>
override fun onCreate(savedInstanceState: Bundle?) {
launcher = Router.get().registerForResult(
this,
ActivityResultContracts.StartActivityForResult(),
) {
// 返回结果
}
}
// 通过UriRequest构建,启动路由页面
private fun start() {
launcher.launch(
UriRequest.Builder("/test")
.withString("toast", "hello world")
.build()
)
}
文档
- https://developer.android.com/build/releases/gradle-plugin-api-updates