看到 AGP8 的transform字节码方式的改变,对 注解处理和路由的原理研究后,
出于兴趣 实现了一个支持AGP8的路由框架:
URouter: https://github.com/classops/URouter
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
}
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()
)
}