Kotlin Multiplatform带你走进跨平台的另一扇大门

1,885 阅读5分钟

前言

大家好,我是未央歌,一个默默无闻的移动开发搬砖者~

想到跨平台,大家现在首先想到的估计都是 Flutter,但是今天不讲他,我们聊聊另外一个跨平台移动开发领域颇具影响力的技术- KMP(Kotlin Multiplatform)

KMP 是一种面向移动端开发的跨平台框架,使用 Kotlin 语言编写,可实现在多平台(桌面 / Andropid / iOS / Web / 服务器)上共享代码和逻辑。通过 KMP 框架,我们可以编写一次代码,然后在不同的平台上进行部署和运行,极大提高了开发效率和代码重用性。

软件安装

Android Studio

Xcode

  • 仅限 Mac 用户,用于 iOS 应用开发和测试
  • 个人不建议在 App Store 直接下载 Xcode,可以安装 Xcodes 然后从上面下载,这样可以下载安装历史版本的 Xcode
  • CocoaPods 的安装,执行 brew install cocoapods。如果这一步不成功,可以看看我上一篇文章,了解如何安装环境拿到一台新MAC,如何快速配置并运行Flutter项目

如果你使用 Windows 或者 Linux,可以忽略 Xcode 和 CocoaPods 的安装。但是也意味着你无法开发测试 iOS 应用,不过你还是可以体验 KMP 在桌面、Android 和 Web 平台的强大功能!

创建项目

使用 JetBrains KMP 脚手架

  • Kotlin Multiplatform wizard >> JetBrains 提供的一个在线模板库,帮助我们快速生成一个包含所有必要配置的 KMP 项目模板。可以选择新建项目,也可以直接下载不同 UI 风格的模板 image.png
  • 我们这次把所有平台都勾选上,然后下载下来并解压,使用 Android Studio 打开项目

项目初识

image.png

  • 主要看 composeApp 目录,src 下分别有对应 4 个平台的目录,存放各个平台特定代码。commonMain 则是存放所有平台共享的代码
  • 另外 shared 目录下的 src 也是有如上几个类似的目录,用来存放可以在多个模块间共享的代码,比如工具类、业务逻辑代码【注意:此处的代码都需要保持清洁,摒弃平台特性】

运行项目

启动 Android 应用

  • 打开项目之后,默认会为 composeApp 模块创建 Android 运行配置,直接点击运行即可 image.png

启动 iOS 应用

  • 需要安装 Kotlin Multiplatform 插件,才能直接运行 image.png
  • 安装完插件之后,下拉选项就有 iosApp 的选项 image.png
  • 点击右边的编辑选项,可以选择运行的对应机器,iOS 模拟器创建方法见我上一篇文章拿到一台新MAC,如何快速配置并运行Flutter项目 image.png
  • 启动运行之后如下图 image.png

启动桌面应用

  • 使用 gradle 命令运行,一会就会弹出一个桌面应用弹窗了 ./gradlew run image.png

  • 运行如果遇到如下问题,去oracle 官网下载对应的版本(如 java 17) android gradle plugin requires java 17 to run. you are currently using java 11

    • 如果是 M 系列芯片的选择 Arm 64 DMG installer
    • 如果是 intel 系列的选择 X64 DMG installer
    • 安装完之后输入以下命令,查看所在路径,然后复制
    /usr/libexec/java_home -V
    

    image.png

    JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home
    PATH=$JAVA_HOME/bin:$PATH:.
    CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:.
    export JAVA_HOME
    export PATH
    export CLASSPATH
    
    • 最后执行命令,输出如果是对应的版本即可
    java -version
    

启动 Web 应用

  • 使用 gradle 命令运行,会在默认浏览器中打开应用 ./gradlew wasmJsBrowserRun image.png

Flutter 对比

  • 技术方向
    • KMP 使用 Kotlin 语言开发,实现代码的最大化共享,同时充分利用每个平台的原生优势
    • Flutter 使用 Dart 语言开发,使用 Skia 渲染引擎绘制 UI
  • 性能对比
    • KMP 的性能优势在于其编译为原生代码的能力,有着与原生应用相媲美的性能。KMP 应用可以直接调用平台 API,减少开销
    • Flutter 虽然在渲染性能上非常出色,但由于其使用自己的渲染引擎,但在某些复杂交互或动画场景下,性能会弱于 KMP
  • 扩展维护
    • KMP 的可扩展性体现在其对平台特定功能的灵活支持。开发者可以轻松添加或修改特定于平台的实现,而不影响其他平台的代码
    • Flutter 虽然可以通过平台通道与原生代码交互,但相比 KMP,这种集成可能更复杂,且需要更多的工作量来维护,成本更高
  • 学习成本
    • KMP 允许高达 80% 的代码跨平台共享,提高开发效率且降低维护成本。但学习曲线相对较陡,且社区支持和资源仍在发展中
    • 提供了快速开发的优势,支持热重载,加快了迭代速度。Flutter 的社区相对活跃,降低了上手难度

最后

如果你对 Android 和 Flutter 感兴趣,可以订阅我的专栏:

感谢大家的支持,码字实在不易,其中如若有错误,望指出,记得点赞关注加收藏哦 ~