# route **Repository Path**: nextT/route ## Basic Information - **Project Name**: route - **Description**: 实现route路由的跳转是一个轻量级route - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2025-12-29 - **Last Updated**: 2026-01-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # route #### 介绍 实现route路由的跳转是一个轻量级route #### 软件架构 软件架构说明 #### 安装教程 混淆: ```kotlin -keep class com.isheji.route_core.** { *; } -keep class com.isheji.route_core.core.** { *; } -keep interface com.isheji.route_core.core.IRouteTable { *; } -keep class * implements com.isheji.route_core.core.IRouteTable { *; } ``` #### 使用说明 ```kotlin 将 route_annotation, route_core, route_api 三个模块导入到自己的项目中 增加插件 id("kotlin-kapt") // kapt 块(核心配置:放在顶层,与android块同级)可以加,不加生成的类就是defauter kapt { arguments { // 传递模块名参数(值为当前模块名称,app模块就填"app",其他模块填对应名称) arg("ROUTE_MODULE_NAME", "app") } } implementation(project(":route_annotation")) // 注解依赖 implementation(project(":route_core")) // 路由核心依赖 implementation(project(":route_api")) kapt(project(":route_core")) 在application中初始化 RouterManage.init(this); ``` ### Activity ```kotlin @Route (path = "/app/MainActivity") 2.RouterManage.getInstance() .build("/app/SecondActivity") .paramString("tab_text", "9527") // 明确表示添加一个String参数 .paramInt("user_age", 25) // 明确表示添加一个Int参数 .paramBoolean("is_vip", true) // 明确表示添加一个Boolean参数 .navigation() ``` ### Fragment ```kotlin @Route (path = "/app/MyFragment") val myFragment = RouterManage.getInstance() .build("/app/MyFragment") .paramString("tab_text", "9527") // 明确表示添加一个String参数 .paramInt("user_age", 25) // 明确表示添加一个Int参数 .paramBoolean("is_vip", true) // 明确表示添加一个Boolean参数 .navigation() // 调用有返回值的新方法 ``` ### Fragment 获取参数值如图(Activity 和 Fragment 一样) ![输入图片说明](https://foruda.gitee.com/images/1766990498811920247/bc46317f_1122660.png "屏幕截图") ### 跨model调用方法 ```kotlin 方法的类必须是object 修饰的 1.无参数构造 @RouteMethod(path = "/app/method") fun getAccty(): String { return "在干嘛呢" } 调用: val userName = RouterManage.getInstance().invokeMethod("/app/method") 1.有参数构造 @RouteMethod(path = "/app/name") fun getName(params: Map): String { return params["name"].toString() } 调用: val userParams = mapOf( "name" to "Bob", "age" to 30 ) val createResult = RouterManage.getInstance().invokeMethod("/app/name", userParams) ``` ### (选用)降级策略 ```kotlin 当传入的path不存在的时候,想跳转到指定的叶面 在application中添加降级策略的代码 RouterManage.setDegradeStrategy(new DefaultToastDegradeStrategy(this)); class DefaultToastDegradeStrategy(context: Context) : IDegradeStrategy { // 使用 applicationContext 来防止内存泄漏 private val appContext: Context = context.applicationContext private val logger = Logger.getLogger(DefaultToastDegradeStrategy::class.java.name) override fun onLost(path: String) { val message = "页面不存在: $path" // 1. 在后台打印错误日志 logger.severe(message) // 2. 在前台向用户显示 Toast 提示 Toast.makeText(appContext, message, Toast.LENGTH_LONG).show() } } ``` ### 路由拦截器 ```kotlin 在跳转页面的时候可以针对某些问题拦截处理,我以登录为主 在application中添加拦截器 RouterCore.addInterceptor(new LoginInterceptor(LoginActivity2.class)); class LoginInterceptor(private val loginActivityClass: Class<*>) : IRouteInterceptor { private val logger = Logger.getLogger(LoginInterceptor::class.java.name) private fun isLoggedIn(context: Context): Boolean { // 模拟登录检查,实际应从 SP 或其他地方获取 return false } override fun intercept(chain: Interceptor.Chain) { val request = chain.request() val path = request.path // 假设需要登录的页面路径都以 "/member/" 开头 if (path.startsWith("/members/")) { val context = RouterManage.getGlobalContext() ?: return if (!isLoggedIn(context)) { logger.warning("拦截器:检测到访问需要登录的页面[$path],但用户未登录,正在跳转到登录页...") val intent = Intent(context, loginActivityClass).apply { putExtra("target_path", path) // 保存目标路径,以便登录后跳转 addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) } context.startActivity(intent) return // 关键:不调用 chain.proceed(),中断跳转 } } chain.proceed(request) } } ```