Skip to content

通过注解实现路由跳转规则 同时增加ksp支持

License

Notifications You must be signed in to change notification settings

Leifzhang/Router-Android

Folders and files

NameName
Last commit message
Last commit date
Feb 6, 2023
Mar 7, 2021
Jul 25, 2022
Feb 6, 2023
Feb 6, 2023
Feb 6, 2023
Feb 7, 2023
Feb 6, 2023
Jul 25, 2022
Mar 7, 2021
Feb 6, 2023
Apr 29, 2020
Sep 1, 2017
Jul 16, 2016
Sep 2, 2021
Feb 6, 2023
Feb 6, 2023
Jul 16, 2016
Jul 16, 2016
Feb 6, 2023
Jun 3, 2020
Mar 7, 2021

Repository files navigation

祖传路由项目

State-of-the-art Shitcode

简单的说功能大部分和阿里美团的路由都半斤八两吧,以前公司拿来做组件化拆分的,支持编译时注册以及增量编译等等,整体kt重构过一次。

支持参数跳转,以及startActivityForResult操作,并提供成功失败回掉监听等。

同时项目升级了kapt版本,已经支持kapt的增量编译了。

新增了ksp支持,速度可以比kapt更快,理论上优化25%以上的注解解释器速度,同时ksp由于已经支持增编以及编译缓存,所以性能更好更优异。

wmrouter 增量编译

如果使用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"
}

使用大法

  1. 根目录 build.gradle 添加
buildscript {
    repositories {
        jcenter()
        google()
    }
    dependencies {
        classpath 'com.kronos.plugin:AutoRegister:0.5.4'
    }
}
  1. 项目目录增加路由注册插件
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')
}
  1. ActivityRouterCallback添加注解
@BindRouter(urls = {"https://wwww.github.com"})
public class TestActivity extends Activity {

}
@BindRouter(urls = {"https://wwww.baidu.com"}, interceptors = {TestInterceptor.class})
public class SimpleCallBack implements RouterCallback {
    @Override
    public void run(RouterContext context) {
        Toast.makeText(context.getContext(), "testing", Toast.LENGTH_SHORT).show();
    }
}
  1. 万一有高仿的路由出现,可以这样
 @BindRouter(urls = { "https://github.com/leifzhang"}, weight=10)
 public class TestActivity extends Activity {

 }
  1. 启动一个路由跳转

直接启动可以用这个:

    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()
                  }
              }

可以通过协程的形式,挂起恢复的获取到返回值。

如果是Module的特别注意

kapt {
    arguments {
        arg("ROUTER_MODULE_NAME", project.getName())
    }
}

使用ksp

这次新增的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)
}

About

通过注解实现路由跳转规则 同时增加ksp支持

Topics

Resources

License

Code of conduct

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published