Kotlin Android与Kotlin Multiplatform项目差异及起步方案咨询
普通Kotlin与Kotlin Multiplatform的项目设置差异
1. 项目结构
- 普通Android Kotlin项目:以Android模块为核心,源集仅包含
main、test等Android专属目录,多模块架构也全部围绕Android平台构建。 - Kotlin Multiplatform项目:采用多目标源集结构,核心是
commonMain(所有平台共享的代码目录),同时搭配androidMain、jvmMain(对应桌面平台)等平台专属源集;每个源集可独立配置资源、依赖和编译规则。
2. Gradle配置
- 普通项目:使用标准的
com.android.application或com.android.library插件,配置聚焦Android平台的编译、签名、混淆等规则。 - KMP项目:必须引入
org.jetbrains.kotlin.multiplatform插件,在kotlin块中显式声明支持的目标(如android()、jvm("desktop"));依赖分为共享依赖(放在commonMain的dependencies块)和平台专属依赖(放在对应源集的dependencies块)。
3. 依赖管理
- 普通项目:直接使用Android或JVM平台的依赖包,无需考虑多平台兼容性。
- KMP项目:优先选择多平台兼容的依赖(如
kotlinx-coroutines-core的多平台版本);对于仅支持单平台的库,需要通过expect/actual机制在common层声明接口,平台层实现具体逻辑,避免在共享代码中直接引用平台专属API。
4. 测试体系
- 普通项目:仅支持Android或JVM平台的单平台测试,测试代码放在对应平台的
test目录。 - KMP项目:支持共享测试(
commonTest)和平台专属测试,共享测试可验证跨平台逻辑的一致性,平台测试针对各平台的特有实现做针对性验证。
Android+桌面平台:先单平台开发再迁移还是直接KMP起步?
直接从Kotlin Multiplatform起步更高效,理由如下:
- 避免额外重构成本:如果先开发Android单平台,后续迁移时需要将业务逻辑从Android模块抽离到
commonMain,还要适配桌面平台的API差异(如文件系统访问、权限逻辑),会增加大量重复工作。 - 统一核心逻辑复用:小工具的核心业务逻辑(如数据处理、核心算法)可以直接写在
commonMain中,Android和桌面平台直接复用,无需重复编码,减少冗余。 - Compose Multiplatform支持双平台UI复用:目前Compose Multiplatform已成熟支持Android和桌面,大部分UI组件可直接共享,仅需用
expect/actual处理少量平台特有UI(如Android的Toast、桌面的系统弹窗)。 - 低复杂度试错:小工具项目规模小,团队可以快速熟悉KMP的开发模式,从两个平台入手,学习曲线平缓,风险可控。
如果团队对KMP不熟悉,可以先尝试将一个核心功能模块用KMP实现,验证可行性后再推进整个项目,但整体项目直接基于KMP搭建仍是最优选择。
内容的提问来源于stack exchange,提问作者automaton
相关产品推荐
相关产品推荐

