
简单的说功能大部分和阿里美团的路由都半斤八两吧,以前公司拿来做组件化拆分的,支持编译时注册以及增量编译等等,整体kt重构过一次。
支持参数跳转,以及startActivityForResult操作,并提供成功失败回掉监听等。
同时项目升级了kapt版本,已经支持kapt的增量编译了。
新增了ksp支持,速度可以比kapt更快,理论上优化25%以上的注解解释器速度,同时ksp由于已经支持增编以及编译缓存,所以性能更好更优异。
如果使用wmrouter的各位,可以直接用我的插件替换工程内的路由初始化,应该能解决项目编译的问题。基本测试都通过了。
buildscript { dependencies { classpath 'com.kronos.plugin:AutoRegister:0.5.5' }}
apply plugin: 'router-register'AutoRegister { REGISTER_PACKAGE_NAME = "com.sankuai.waimai.router.generated.service" REGISTER_CLASS_NAME = "com.sankuai.waimai.router.generated.ServiceLoaderInit" REGISTER_FUNCTION_NAME = "init" REGISTER_CLASS_FUNCTION_NAME = "init"}
- 根目录
build.gradle 添加
buildscript { repositories { jcenter() google() } dependencies { classpath'com.kronos.plugin:AutoRegister:0.5.4' }}- 项目目录增加路由注册插件
apply plugin: 'router-register'dependencies { compile 'com.github.leifzhang:routerLib:0.5.1' kapt "com.github.leifzhang:compiler:0.5.1"}
万一你不想用plugin了,我给你准备了一个慢一点的还在方式,以前偷的arouter的类反射机制的。
dependencies {// 如果你不要用transform implementation project(':EmptyLoader')}- 给
Activity或RouterCallback添加注解
@BindRouter(urls = {"https://wwww.github.com"})publicclassTestActivityextendsActivity {}@BindRouter(urls = {"https://wwww.baidu.com"},interceptors = {TestInterceptor.class})publicclassSimpleCallBackimplementsRouterCallback {@Overridepublicvoidrun(RouterContextcontext) {Toast.makeText(context.getContext(),"testing",Toast.LENGTH_SHORT).show(); }}- 万一有高仿的路由出现,可以这样
@BindRouter(urls = {"https://github.com/leifzhang"},weight=10)publicclassTestActivityextendsActivity { }- 启动一个路由跳转
直接启动可以用这个:
Router.sharedRouter().open("https://github.com/leifzhang",this);复杂的多参数传递可以用这个:
val request=KRequest("https://www.baidu.com/test", onSuccess= {Log.i("KRequest","onSuccess") }, onFail= {Log.i("KRequest","onFail") }).apply { activityResultCode=12345 }.start(this)DSL 版本
request("https://www.baidu.com/test") { activityResultCode=12345 success { } fail { } bundle { putString("1234","1234") } }.start(this)通过dsl的形式也可以使用路由
协程版本
GlobalScope.launch {val result= request("https://www.baidu.com/test") { activityResultCode=12345 bundle { putString("1234","1234") } }.dispatcher(this@MainActivity) delay(1000) withContext(Dispatchers.Main) {Toast.makeText(this@MainActivity,if (result)"成功了"else"失败了",Toast.LENGTH_SHORT ).show() } }可以通过协程的形式,挂起恢复的获取到返回值。
kapt { arguments { arg("ROUTER_MODULE_NAME", project.getName()) }}这次新增的ksp可以完美和kapt进行支持,ksp compiler 暂时只支持全量kotlin
plugins {// 这个 id 就是在 versionPlugin 文件夹下 build.gradle.kts.kts 文件内定义的id id("com.android.library") id("com.google.devtools.ksp") version"1.4.30-1.0.0-alpha04"}dependencies {// 使用ksp进行注解生成 ksp(project(":kspCompiler"))}// 子模块可以加上这个ksp { arg("ROUTER_MODULE_NAME", project.name)}