用途
该技能旨在指导开发者将原本单一的 Kotlin Multiplatform UI 模块重构为三个职责明确的模块:一个共享库模块(shared library)和两个轻量级启动器模块(Android launcher 与 desktop launcher)。共享库承载所有 UI、视图模型、expect/actual 声明及共享资源;Android 启动器负责清单、图标、应用类、压缩规则、ABI 拆分和商店配置;桌面启动器负责 main()、打包目标、安装器元数据和压缩器接线。
主要能力
- 定义三个模块的插件应用与职责边界,明确插件列表可以重叠,但所有权必须分离。
- 提供两启动器依赖共享库的 Gradle 配置示例(version catalog 与 project 路径两种形式)。
- 解释为什么 Android 侧不能省略:AGP 仅提供 multiplatform 库插件,没有 multiplatform 应用插件,因此承载 Android multiplatform 目标的模块按构造是库,必须另设普通 Android 应用模块来产出可安装产物。
- 给出桌面侧交接方式:库暴露单个公共函数(如 runDesktopApp),启动器拥有 main() 和 argv,打包块指向该文件(mainClass = "com.example.app.MainKt")。
- 列出多个陷阱及应对:库与应用的默认行为差异(如 Compose 资源访问器不再自动生成,需设置 compose.resources { generateResClass = always });库中任务不会自动接入启动器打包流程,需显式声明跨项目依赖;启动器中插件顺序具有行为影响;单目标启动器可能仍需 Kotlin Multiplatform 插件;依赖图中的条件需在每个启动器重复;压缩器在启动器运行但规则文件常留在库中;启动器不应体积膨胀,可用文件数量测量。
- 提供验证命令:检查各模块插件列表、确认无模块依赖启动器(grep 应无输出)。
使用方式
技能以文档形式给出操作步骤与代码片段,开发者需按照模块划分调整 Gradle 构建脚本、迁移源码、配置打包任务并运行验证命令。文中包含版本检查脚本(如通过解压 AGP jar 列出插件 id)和查找遗漏依赖的 grep 命令,但所有命令均需结合自身项目路径调整。
适用场景
- 已将 Kotlin Multiplatform 与 Compose Multiplatform 用于跨平台 UI,需要将 Android 应用打包与共享代码分离的项目。
- 需要同时产出 Android 安装包与桌面安装包,并希望共享 UI 与逻辑的场景。
- 希望避免启动器模块膨胀、确保打包任务正确依赖共享库任务的项目。
限制
资料未提供该技能的安装命令、收费模式、平台支持范围或效果验证数据。文中提到的 AGP 版本(如 9.2.1)仅为示例,实际行为需以本地版本为准。所有建议均需结合具体项目验证,技能本身不提供自动化工具或运行时支持。