{"id":16558336,"url":"https://github.com/leifzhang/router-android","last_synced_at":"2025-03-16T20:30:31.535Z","repository":{"id":45902557,"uuid":"63483690","full_name":"Leifzhang/Router-Android","owner":"Leifzhang","description":"通过注解实现路由跳转规则 同时增加ksp支持","archived":false,"fork":false,"pushed_at":"2023-02-07T10:18:46.000Z","size":438,"stargazers_count":185,"open_issues_count":0,"forks_count":17,"subscribers_count":4,"default_branch":"master","last_synced_at":"2024-10-12T20:10:44.812Z","etag":null,"topics":["android","annotations","gradle-kotlin-dsl","ksp","route","routers"],"latest_commit_sha":null,"homepage":"","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Leifzhang.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-07-16T13:14:56.000Z","updated_at":"2024-08-19T08:13:42.000Z","dependencies_parsed_at":"2022-09-19T18:23:35.360Z","dependency_job_id":null,"html_url":"https://github.com/Leifzhang/Router-Android","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Leifzhang%2FRouter-Android","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Leifzhang%2FRouter-Android/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Leifzhang%2FRouter-Android/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Leifzhang%2FRouter-Android/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Leifzhang","download_url":"https://codeload.github.com/Leifzhang/Router-Android/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":221667597,"owners_count":16860623,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","annotations","gradle-kotlin-dsl","ksp","route","routers"],"created_at":"2024-10-11T20:10:26.056Z","updated_at":"2024-10-27T11:12:43.266Z","avatar_url":"https://github.com/Leifzhang.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 祖传路由项目\n\n[![State-of-the-art Shitcode](https://img.shields.io/static/v1?label=State-of-the-art\u0026message=Shitcode\u0026color=7B5804)](https://github.com/trekhleb/state-of-the-art-shitcode)\n\n\n\n简单的说功能大部分和阿里美团的路由都半斤八两吧，以前公司拿来做组件化拆分的，支持编译时注册以及增量编译等等，整体kt重构过一次。\n\n\n支持参数跳转，以及startActivityForResult操作，并提供成功失败回掉监听等。\n\n\n同时项目升级了kapt版本，已经支持kapt的增量编译了。\n\n\n新增了ksp支持，速度可以比kapt更快，理论上优化25%以上的注解解释器速度，同时ksp由于已经支持增编以及编译缓存，所以性能更好更优异。\n\n\n\n## wmrouter 增量编译\n\n如果使用wmrouter的各位，可以直接用我的插件替换工程内的路由初始化，应该能解决项目编译的问题。基本测试都通过了。\n\n~~~\nbuildscript {\n    dependencies {\n        classpath 'com.kronos.plugin:AutoRegister:0.5.5'\n          }\n}\n~~~\n\n~~~\napply plugin: 'router-register'\nAutoRegister {\n    REGISTER_PACKAGE_NAME = \"com.sankuai.waimai.router.generated.service\"\n    REGISTER_CLASS_NAME = \"com.sankuai.waimai.router.generated.ServiceLoaderInit\"\n    REGISTER_FUNCTION_NAME = \"init\"\n    REGISTER_CLASS_FUNCTION_NAME = \"init\"\n}\n~~~\n\n## 使用大法\n\n1. 根目录 `build.gradle` 添加\n\n```gradle\nbuildscript {\n    repositories {\n        jcenter()\n        google()\n    }\n    dependencies {\n        classpath 'com.kronos.plugin:AutoRegister:0.5.4'\n    }\n}\n```\n2. 项目目录增加路由注册插件\n\n```\napply plugin: 'router-register'\n\ndependencies {\n    compile 'com.github.leifzhang:routerLib:0.5.1'\n    kapt \"com.github.leifzhang:compiler:0.5.1\"\n}\n```\n\n    万一你不想用plugin了，我给你准备了一个慢一点的还在方式，以前偷的arouter的类反射机制的。\n\n```gradle\ndependencies {\n    // 如果你不要用transform\n    implementation project(':EmptyLoader')\n}\n```\n\n    \n3. 给`Activity`或`RouterCallback`添加注解\n\n```java \n@BindRouter(urls = {\"https://wwww.github.com\"})\npublic class TestActivity extends Activity {\n\n}\n```\n\n```java \n@BindRouter(urls = {\"https://wwww.baidu.com\"}, interceptors = {TestInterceptor.class})\npublic class SimpleCallBack implements RouterCallback {\n    @Override\n    public void run(RouterContext context) {\n        Toast.makeText(context.getContext(), \"testing\", Toast.LENGTH_SHORT).show();\n    }\n}\n\n```\n\n4. 万一有高仿的路由出现，可以这样\n\n```java\n @BindRouter(urls = { \"https://github.com/leifzhang\"}, weight=10)\n public class TestActivity extends Activity {\n\n }\n```\n\n5.  启动一个路由跳转\n\n直接启动可以用这个:\n\n```java\n    Router.sharedRouter().open(\"https://github.com/leifzhang\", this);\n```\n复杂的多参数传递可以用这个:\n\n```kotlin\n  val request = KRequest(\"https://www.baidu.com/test\", onSuccess = {\n                    Log.i(\"KRequest\", \"onSuccess\")\n                }, onFail = {\n                    Log.i(\"KRequest\", \"onFail\")\n                }).apply {\n                    activityResultCode = 12345\n                }.start(this)\n```\nDSL 版本\n```kotlin\n            request(\"https://www.baidu.com/test\") {\n                activityResultCode = 12345\n                success {\n\n                }\n                fail {\n\n                }\n                bundle {\n                    putString(\"1234\", \"1234\")\n                }\n            }.start(this)\n\n```\n通过dsl的形式也可以使用路由\n\n协程版本\n```kotlin\n    GlobalScope.launch {\n                  val result = request(\"https://www.baidu.com/test\") {\n                      activityResultCode = 12345\n                      bundle {\n                          putString(\"1234\", \"1234\")\n                      }\n                  }.dispatcher(this@MainActivity)\n                  delay(1000)\n                  withContext(Dispatchers.Main) {\n                      Toast.makeText(\n                          this@MainActivity,\n                          if (result) \"成功了\" else \"失败了\",\n                          Toast.LENGTH_SHORT\n                      ).show()\n                  }\n              }\n```\n可以通过协程的形式，挂起恢复的获取到返回值。\n\n## 如果是Module的特别注意\n\n```kotlin\nkapt {\n    arguments {\n        arg(\"ROUTER_MODULE_NAME\", project.getName())\n    }\n}\n```\n\n## 使用ksp\n\n这次新增的ksp可以完美和kapt进行支持，ksp compiler 暂时只支持全量kotlin\n\n```kotlin\nplugins {\n    // 这个 id 就是在 versionPlugin 文件夹下 build.gradle.kts.kts 文件内定义的id\n    id(\"com.android.library\")\n    id(\"com.google.devtools.ksp\") version \"1.4.30-1.0.0-alpha04\"\n}\n\ndependencies {\n    // 使用ksp进行注解生成\n    ksp(project(\":kspCompiler\"))\n}\n\n// 子模块可以加上这个\nksp {\n    arg(\"ROUTER_MODULE_NAME\", project.name)\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fleifzhang%2Frouter-android","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fleifzhang%2Frouter-android","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fleifzhang%2Frouter-android/lists"}