初始化
//在Application中
Metro.init(this)
添加站点
注意:站点现支持Activity,Service,Fragment
- 注解方式
//在对应的类上增加注解
@Station("/main")
class MainActivity{}
- 代码方式
MetroMap.addStation("/main", MainActivity::class.java)
跳转
//跳转到Activity
Metro.with(this)
.path("/main")
.put("currIndex", 1)
.go()
//跳转到Service
Metro.with(this)
.path("/main")
.serviceLauncher()
.go()
//跳转到Fragment
Metro.with(this)
.path("/main")
.fragmentLauncher()
.go()
错误回调
Metro.with(this)
.path("/main")
.fail {
Log.e("metro", it.toString())
}
.go()
拦截器
//增加中转站(类似拦截器)
MetroMap.addTransferStation(object : Transfer {
override fun run(chain: Transfer.Chain): Ticket {
val ticket = chain.ticket()
Logger.d("目的路径 = ${ticket.path}")
return chain.proceed(ticket)
}
})
//登录拦截器
class UserAuthTransfer : Transfer {
override fun transfer(chain: Transfer.Chain): Ticket {
val ticket = chain.ticket()
if (needLogin(ticket.path)) {
ticket.clear()
ticket.path = "/account/login"
ticket.overridePendingTransition(R.anim.slide_in_from_bottom, R.anim.noting)
}
return chain.proceed(ticket)
}
private fun needLogin(path: String) = when {
path.isBlank() -> false
//增加需要校验登录权限的页面
path.startsWith("/main") -> true
else -> false
}
}
project的build.gradle
allprojects {
repositories {
......
maven { url "https://jitpack.io" }
}
}
具体模块的build.gradle,例如app.gradle
注意:默认使用kotlin1.4.0版本的库
//Kapt插件,必须!
apply plugin: 'kotlin-kapt'
//生成的路由配置类为UUID命名,若要让生成路由配置类明确模块,可加入以下操作
kapt {
arguments {
arg("metroModuleName", project.getName())
}
}
//常规依赖
dependencies {
//库本体只要在底层模块依赖一次即可
implementation 'com.github.caoyanglee.Metro:lib:{latestVersion}'
//在需要路由功能的模块下,使用注解处理器
kapt 'com.github.caoyanglee.Metro:compiler:{latestVersion}'
}
#Metro
-keep class com.pmm.metro.**{*;}
-keepnames class com.pmm.metro.**{*;}
在Application中的Metro.init(this)
,默认会加载所有路由配置文件,因为是自动扫描所以是耗时操作,我们建议做以下优化
Metro.init(
context = this,
autoLoadConfigClass = false //不在使用自动加载
)
//指定加载路由配置文件,速度快
Metro.loadConfigClass("MetroRoute_xxx")
PS:路由配置文件生成的位置在各个moduel的build/generated/source/kaptKotlin/debug
中,每个配置类对应的包名都是com.pmm.metro.route
,唯一不同的是类名。