
基于 CMPCompose Multiplatform共享 UI SQLDelight Voyager 的落地样例以下从架构、数据层、导航与跨端适配四个维度拆解一套 Kotlin 代码同时驱动 Android/iOS AI 对话客户端的实战路径。一、整体架构与代码复用率CMP 允许用同一份 Kotlin Compose 代码编译至 Android、iOS、Desktop 等端业务逻辑网络、ViewModel、DB可 100% 共享UI 代码共享率普遍在95%。典型分层为共享层commonMainAPI 客户端、ViewModel、本地库、导航图平台入口Android 用ComponentActivity.setContentiOS 用ComposeUIViewController包装后由 SwiftUI 调用二、数据持久化SQLDelight 落地在跨端 AI 客户端如 DeepCo中SQLDelight 作为类型安全本地库在commonMain定义Conversation、Message、ApiEndpoint等表自动生成 SQL 查询统一存储聊天记录与密钥。Chatter 同样采用 SQLDelight 做 SQLite 持久化保障 Android/iOS/Desktop 对话历史离线可用。三、导航与路由Voyager 角色补充虽然搜索结果未直接展开 Voyager 代码但同生态的导航实践显示CMP 项目常用声明式导航库如 JetBrains Navigation Compose 或第三方 Voyager管理聊天页/设置页跳转。Voyager 以纯 Kotlin 多平台路由替代平台原生导航使commonMain持有全量页面栈Android/iOS 仅渲染。四、跨端 AI 对话关键代码范式共享聊天界面commonMainkotlinComposable fun ChatScreen(presenter: AIPresenter) { val state by presenter.state.collectAsState() LazyColumn { items(state.messages) { MsgBubble(it) } } TextField(onValueChange { presenter.ask(it) }) }Android 入口kotlinclass MainActivity : ComponentActivity() { override fun onCreate(s: Bundle?) { setContent { ChatScreen(AIPresenter()) } } }iOS 入口kotlinfun MainViewController() ComposeUIViewController { ChatScreen(AIPresenter()) }Swift 侧用UIViewControllerRepresentable嵌入实现“一套 UI 代码双端运行”。五、痛点直击与避坑API 密钥安全密钥存本地DataStore/Room/SQLDelight不硬编码BYOK 模式优先流式响应Ktor 协程处理 SSEAndroid/iOS 共用bodyAsChannel()解析data:增量平台差异文件选择等用expect/actual隔离公共 UI 无感知综上CMP SQLDelight Voyager 的组合让 Android/iOS AI 对话应用从“双代码库”收敛为“单 KMP 模块”显著降低维护成本并保持一致体验。