Giter Site home page Giter Site logo

router-android's Introduction

祖传路由项目

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

router-android's People

Contributors

leifzhang avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

router-android's Issues

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.