一个简单的路由框架
特点:
- AGP8 的支持
- Kotlin属性和setter的支持
- ActivityResult的支持
- 自动获取路由模块名,减少了配置项
- 支持增量编译
- 支持 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.2' apply false
}
- app模块的build.gradle添加插件和依赖:
plugins {
id "kotlin-kapt"
id 'io.github.classops.urouter'
}
dependencies {
kapt "io.github.classops.urouter:router-compiler:1.0.2"
implementation "io.github.classops.urouter:router:1.0.2"
}
- Application中初始化
class App : Application() {
override fun onCreate() {
super.onCreate()
Router.get().init(this)
}
}
- 项目中使用
// 在需要路由的 Activity/Fragment 上添加注解
@Route(path = "/home")
class MainActivity : AppCompatActivity() {
@Param
var toast: String? = ""
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// 解析参数到 toast 字段
Router.get().inject(this)
// 点击跳转新页面
val btnNav = findViewById<Button>(R.id.btnNav)
btnNav.setOnClickListener {
Router.get().build("/home")
.withString("toast", "hello world")
.navigate(this)
}
// 接收 toast 参数
if (toast?.isNotEmpty() == true) {
Toast.makeText(this, toast, Toast.LENGTH_LONG)
.show()
}
}
}
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()
)
}