如何用 AI 辅助构建KMP 多应用架构( Seraphim Framework)

0 阅读1分钟

写在前面

最近我基于 Kotlin Multiplatform (KMP) 设计并实现了一个多应用的 Android 开发框架 —— Seraphim Framework。在这个过程中,我不仅运用了多年的模块化架构经验,还尝试与 Claude Opus 4.6 深度协作,让 AI 帮我生成大量样板代码、优化设计文档,甚至一起推敲技术选型。这篇文章记录了我的设计思路,以及 AI 是如何成为得力助手的。

为什么要做这样一个东西?

在日常开发中,我常常需要同时维护多个独立 App,它们共享一些基础能力(网络、存储、权限、工具类),但业务逻辑又完全隔离。如果每个 App 都从头搭建项目结构、重复配置 Gradle、复制粘贴工具类,不仅效率低下,还容易导致技术栈碎片化。

于是我想:能不能搭建一个多应用共享内核的模板项目?既能快速孵化新 App,又能保证底层统一、易于维护。而且,既然 Kotlin Multiplatform 已经成熟,为什么不把业务层也做成 KMP,为未来跨平台做准备?

这就是 Seraphim Framework 的初衷。

整体架构设计

我采用了清晰的分层结构,将项目拆分为四个主要层次:

┌─────────────────────────────────────┐
│           App Layer (Android)        │
│  apps/delicacies, apps/pokemon, ...  │
├─────────────────────────────────────┤
│       Shared Business Layer (KMP)    │
│  shareds/delicacies, shareds/pokemon │
├─────────────────────────────────────┤
│            Core Layer (KMP)           │
│  core/network, core/storage, etc.    │
├─────────────────────────────────────┤
│           Utils (KMP)                 │
│  utils                                │
└─────────────────────────────────────┘
  • App Layer:只负责 UI(Compose)、导航、ViewModel 和 DI 组装,不包含业务逻辑。

  • Shared Layer:每个 App 对应的 KMP 模块,包含 UseCase、Repository、本地数据库(Room)、网络服务等。这一层可以在 Android 和 iOS 间复用。

  • Core Layer:基础设施封装,如网络请求(Ktor)、存储(Room + MMKV)、权限管理(Android 专用)等。

  • Utils:纯工具函数,多平台通用。

这样的分层让每个模块职责单一,依赖关系明确。同时,通过 约定插件(Convention Plugins) 统一管理所有模块的构建配置,彻底消灭了冗余的 build.gradle 代码。

技术选型与思考

在选型时,我优先考虑多平台支持、社区活跃度、与 Kotlin 的契合度。最终的技术栈如下:

类别

技术

理由

UI

Jetpack Compose

现代声明式 UI,与 Kotlin 无缝集成

DI

Koin (KSP)

轻量、简单,支持 KMP,配合 KSP 编译期检查

网络

Ktor + Kotlinx Serialization

官方出品,多平台一致性高

数据库

Room (KMP) + MMKV

Room 在 Android 上成熟稳定,KMP 支持日渐完善;MMKV 提供高性能 KV 存储

图片

Coil

Compose 友好,支持多种数据源

导航

Compose Destinations

类型安全、代码生成,避免手写 NavGraph

构建

19 个自定义约定插件

统一版本、简化模块配置

代码规范

Spotless + ktlint

保证代码风格一致

这些选型并不是一次定下的。在 AI 的帮助下,我对比了多种方案的优缺点,例如 Koin vs Koin Annotations vs Koin KSP,最终选择了 Koin KSP 以获得编译期安全性。

AI 如何辅助我完善框架?

在整个开发过程中,Claude Opus 4.6 扮演了多个角色:

1. 架构推演与设计建议

我进行了技术架构的选型和基础插件的设计搭建,AI帮我再开发过程中从AGP8升级到AGP9,快速生成基本的模块代码,AI 提供了多种多模块组织的参考案例,通过skills尽量的控制了幻觉的产生虽然过程中还是会产生不可预想的偏离。

2. 编写模块 README 和文档

项目中的 doc/ 文件夹存放了两个 App 的 PRD(产品需求文档)。这些文档最初是我口述功能点,AI 帮我润色成结构清晰、语言流畅的正式文档。后来我还让 AI 生成了模块的 README,确保每个模块都有独立的使用说明。

3. 代码补全与优化

在实现具体功能时(如 Ktor 的 receiveBffResult 扩展函数),AI 提供了完整的代码实现,并帮我处理了泛型、协程异常等细节。我只需要将其复制到项目中,稍作调整即可。

4. 生成测试用例和截图测试配置

为了确保代码质量,我引入了 Roborazzi 进行截图测试。AI 帮我编写了 jacoco 插件的配置,以及几个模块的单元测试模板,让我快速覆盖核心逻辑。

一些 AI 协作的心得

  • 明确意图:向 AI 描述问题时,越具体越好。比如“我需要一个 Gradle 插件,作用是为 Android 模块统一设置 compileSdk = 36”,比“帮我写个插件”效果好得多。

  • 迭代式对话:AI 生成的代码往往需要微调。我会把生成的代码放入项目,如果编译出错,直接把错误反馈给 AI,它能快速定位并修正。

  • 利用 AI 做决策:遇到技术选型犹豫不决时,我会列出几个选项,让 AI 列出各自的优缺点,再结合我的场景做决定。比如 Room 与 SQLDelight 的对比,最终我选择了 Room 因为更熟悉且官方支持。

  • 保持主导权:AI 是辅助,不能完全替代人的判断。架构的核心思想、模块划分的边界,还是需要自己把握。AI 的作用是加速实现、提供灵感。

结语

Seraphim Framework 是一个对本身多年APP开发的设计总结和对AI使用的初步验证,看到这里大家可能也发现了这篇文章本身99%也是通过Deepseek生成的,本来我想用豆包的在写文章吹牛这块感觉豆包比Deepseek厉害不过太烂了不想搞了。

欢迎到 GitHub 上看看源码(github.com/li-lance/an…),也欢迎与我交流。让我们一起,让开发更高效、更有趣。