跨平台路由组件工程源码补充上传

发布时间:2026/7/8 5:39:59
跨平台路由组件工程源码补充上传 后附源码地址MyRouterProject - Android Flutter 混合路由演示基于common_router路由 SDK 的 Android Flutter 混合路由演示项目覆盖四种跨端跳转场景。应用截图Native 首页Flutter 演示页项目结构MyRouterProject/ ├── common_router/ # 路由核心 SDKAndroid Library │ └── src/main/java/com/example/mall/common/common_router/ │ ├── MyRouter.kt # 统一路由管理器核心入口 │ ├── RouteConfigLoader.kt # 路由配置加载器解析 JSON │ ├── RouteRegistry.kt # 路由注册中心 │ ├── PageStackManager.kt # 页面栈管理器 │ ├── RouterInitializer.kt # 导航器注入器 │ ├── model/ # 数据模型 │ │ ├── RouteType.kt # 路由类型枚举 │ │ ├── RouteConfig.kt # 配置数据模型 │ │ ├── NavigationResult.kt # 导航结果密封类 │ │ ├── PageRecord.kt # 页面记录 │ │ └── LaunchMode.kt # 启动模式枚举 │ └── navigator_interface/ │ ├── INativeNavigator.kt # Native 导航器接口 │ └── IFlutterNavigator.kt # Flutter 导航器接口 │ ├── app/ # 宿主 App 模块 │ └── src/main/ │ ├── assets/page_config.json # 路由配置表 │ ├── java/com/example/myrouter/ │ │ ├── MyRouterApplication.kt # Application 入口 │ │ ├── RouterDemoActivity.kt # 路由演示主页Launcher │ │ ├── NativeDemoActivity.kt # Native 演示页 │ │ ├── NativeSecondActivity.kt# Native 第二页 │ │ ├── FlutterRouteActivity.kt# Flutter 桥接 Activity │ │ └── navigator/ │ │ ├── NativeNavigatorImpl.kt │ │ └── FlutterNavigatorImpl.kt │ └── res/layout/ │ ├── activity_router_demo.xml │ ├── activity_native_demo.xml │ └── activity_native_second.xml │ └── feature_flutter/ # Flutter Module └── lib/ ├── main.dart # Flutter 入口MethodChannel 处理 ├── flutter_router.dart # Flutter 端路由工具类 └── pages/ ├── router_demo_flutter_page.dart # Flutter 路由演示页 ├── flutter_page_a.dart # Flutter 页面 A └── flutter_page_b.dart # Flutter 页面 B架构App 层 路由 SDK Flutter ┌──────────────┐ ┌──────────────────┐ ┌──────────────────┐ │ MyRouterApp │────│ MyRouter │ │ FlutterRouter │ │ Application │ │ ├─ push(url) │───│ MethodChannel │ │ │ │ ├─ pop() │ │ ├─ navigate() │ │ NativeNavigator │◄───│ ├─ popTo() │ │ ├─ getParams() │ │ Impl │ │ ├─ buildUrl() │ │ └─ pop() │ │ FlutterNavigator │ │ └─ parseUrl() │ └──────────────────┘ │ Impl │ └──────────────────┘ └──────────────┘common_router不依赖任何具体 Activity/Flutter 页面通过接口INativeNavigator/IFlutterNavigator完全解耦路由表由page_config.json驱动运行时加载无需硬编码Native ↔ Flutter 通过MethodChannel(com.example.myrouter/router)双向通信四种跳转场景场景发起端目标端链路Native → Flutter点击按钮 →MyRouter.push()FlutterRouteActivity→ FlutterFlutterNavigatorImpl → IntentNative → Native点击按钮 →MyRouter.push()NativeDemoActivityNativeNavigatorImpl → IntentFlutter → NativeFlutter 页面按钮NativeDemoActivityMethodChannel → NativeNavigatorImpl → IntentFlutter → Flutter跨端Flutter 页面按钮FlutterRouteActivityMethodChannel → FlutterNavigatorImpl → IntentFlutter → Flutter本地Flutter 页面按钮Flutter 页面 A/BFlutter Navigator 内部跳转common_router 集成指南接入步骤1. 引入模块在settings.gradle.kts中声明include(:common_router)project(:common_router).projectDirfile(common_router)宿主模块build.gradle.kts添加依赖implementation(project(:common_router))2. 实现导航器接口创建 Native 导航器实现INativeNavigatorclassNativeNavigatorImpl:INativeNavigator{overridefunnavigate(context:Context,path:String,params:MapString,String):NavigationResult{valintentwhen(path){/native/demo-Intent(context,NativeDemoActivity::class.java)else-returnNavigationResult.NotSupported}params.forEach{(k,v)-intent.putExtra(k,v)}intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)// Application context 启动必加context.startActivity(intent)returnNavigationResult.Success}overridefuncanNavigate(path:String)path.startsWith(/native/)}创建 Flutter 导航器实现IFlutterNavigatorclassFlutterNavigatorImpl:IFlutterNavigator{overridefunnavigate(context:Context,path:String,params:MapString,String,launchMode:LaunchMode):NavigationResult{valintentIntent(context,FlutterRouteActivity::class.java).apply{putExtra(page,path)putExtra(params,params.entries.joinToString(,){${it.key}${it.value}})addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)}context.startActivity(intent)returnNavigationResult.Success}overridefuncanNavigate(path:String)path.startsWith(/flutter/)}3. 初始化在Application.onCreate()中完成初始化classMyRouterApplication:Application(){overridefunonCreate(){super.onCreate()MyRouter.init(this,page_config.json)PageStackManager.clear()// 确保进程复用时栈重置RouterInitializer.injectNavigators(nativeNavigatorNativeNavigatorImpl(),flutterNavigatorFlutterNavigatorImpl())}}配置路由表在app/src/main/assets/page_config.json中注册页面{version:1.0.0,routes:[{page:/native/demo,type:NATIVE,description:Native 演示页},{page:/flutter/demo,type:FLUTTER,description:Flutter 演示入口}]}字段说明值page路由路径唯一标识/native/demo等type页面类型NATIVE/FLUTTERdescription描述文字任意字符串执行跳转// Native 侧AndroidMyRouter.push(myrouter://myrouter?page/native/demoinfo{\from\:\Home\})// Flutter 侧DartFlutterRouter.navigate(/native/demo,params:{from:Flutter})// 构建 URLvalurlMyRouter.buildUrl(/native/demo,paramsmapOf(fromtoHome))页面栈管理// 返回上一页MyRouter.pop()// 返回到指定页面MyRouter.popTo(/native/demo)// 获取当前页面valcurrentMyRouter.getCurrentPage()// Activity 销毁时自动退栈overridefunonDestroy(){if(isFinishing)MyRouter.pop()super.onDestroy()}Flutter 侧依赖Flutter 工程依赖flutter_router.dart通过import package:feature_flutter/flutter_router.dart使用// 跳转到 Native 页面FlutterRouter.navigate(/native/demo);// 跳转到 Flutter 页面跨端FlutterRouter.navigate(/flutter/pageA);// 获取 Native 传递的参数finalparamsawaitFlutterRouter.getRouteParams();// 通知 Native 返回FlutterRouter.pop();Flutter 侧通过MethodChannel(com.example.myrouter/router)与 Android 通信Android 端在FlutterRouteActivity.configureFlutterEngine()中处理navigate、getRouteParams、pop三个方法调用。构建与运行前置条件JDK 17Android SDKcompileSdk 34, minSdk 24Flutter SDK^3.9.2构建命令exportJAVA_HOME/path/to/jdk17# 编译 common_router./gradlew :common_router:compileDebugKotlin# 编译 App./gradlew :app:compileDebugKotlin# 编译 Flutter Modulecdfeature_flutterflutter pub getflutter build apk# 完整构建 APK./gradlew :app:assembleDebug路由配置编辑app/src/main/assets/page_config.json{version:1.0.0,routes:[{page:/native/demo,type:NATIVE,description:Native 演示页},{page:/native/second,type:NATIVE,description:Native 第二页},{page:/flutter/demo,type:FLUTTER,description:Flutter 演示入口},{page:/flutter/pageA,type:FLUTTER,description:Flutter 页面 A},{page:/flutter/pageB,type:FLUTTER,description:Flutter 页面 B}]}URL 协议myrouter://myrouter?page/native/demoinfo{from:Home}launchModeSTANDARDpage: 路由路径必填info: JSON 参数可选launchMode: 启动模式可选默认 STANDARD页面栈管理还需优化PageStackManager是进程级单例统一维护跨平台页面栈push()— 入栈自动防溢出最大 30 层pop()— 出栈replace()— 替换栈顶clearTo()— 清空到指定页面clear()— 清空整个栈支持五种启动模式STANDARD、REPLACE、SINGLE_TOP、CLEAR_TOP、NEW_TASK。未来规划完善页面栈管理统一管理Native中Activity与Flutter中dart页面维护统一一套应用栈完善LaunchMode跳转模式适配。混淆与安全项目地址https://gitee.com/eastworld_zp/my-router-multiplatform