多平台程序设计

多平台项目处于 Alpha版。语言特性与工具都可能在未来的 Kotlin 版本中发生变化。

支持多平台程序设计是 Kotlin 的主要优势之一。 它减少了为不同平台编写与维护相同代码所花的时间,同时保留了原生编程的灵活性与优势。

以下是 Kotlin 多平台的工作原理。

Kotlin 多平台

  • 公共 Kotlin 包括语言、核心库与基本工具。 用公共 Kotlin 编写的代码适用于所有平台的各个地方。
  • 借助 Kotlin 多平台库,可以在公共代码以及平台相关代码中复用多平台逻辑。 公共代码可以依赖一组涵盖日常任务的库,例如 HTTP序列化(serialization)管理协程(coroutines)
  • 如需与平台互操作,请使用平台相关的 Kotlin 版本。平台相关的 Kotlin 版本 (Kotlin/JVM、 Kotlin/JS、 Kotlin/Native)包含对 Kotlin 语言的扩展以及平台相关的库与工具。
  • 通过这些平台可以访问平台原生代码(JVM、 JS 与 Native)并利用所有原生功能。

使用 Kotlin 多平台,花更少的时间为不同平台编写并维护相同的代码 ——只需使用 Kotlin 提供的机制进行共享即可:

如果需要从共享代码中访问平台相关的 API,请使用 Kotlin 的预期声明与实际声明机制。

使用这一机制,公共源代码集定义一个预期(expect)声明,平台源代码集必须提供与该预期声明对应的实际(actual)声明。 这适用于大多数 Kotlin 声明,例如函数、 类、 接口、 枚举、 属性以及注解。

Expect and actual declarations

//公共
expect fun randomUUID(): String
//Android
import java.util.*
actual fun randomUUID() = UUID.randomUUID().toString()
//iOS
import platform.Foundation.NSUUID
actual fun randomUUID(): String = NSUUID().UUIDString()

使用场景

Android——iOS

移动平台之间共享代码是 Kotlin 多平台的主要使用场景之一。 借助 Kotlin 多平台移动端(KMM,Kotlin Multiplatform Mobile), 可以构建在 Android 与 iOS 之间共享代码的多平台移动端应用程序, 例如可共享业务逻辑、连接性等。

参见 KMM 特性、案例研究与示例

客户端——服务器端

代码共享可以带来收益的另一个场景是互联应用,其中的逻辑可以在服务器与运行在浏览器中的客户端中复用。Kotlin 多平台也覆盖了这个场景。

Ktor 框架适用于在互联系统中构建异步的服务器与客户端。

接下来做什么?

刚接触 Kotlin?可以看看 Kotlin 入门页。

文档

教程

  • 创建第一个 KMM 应用程序展示了如何借助用于 Android Studio 的 KMM 插件来创建可用于 Android 与 iOS 的移动端应用程序。 创建、运行并测试第一个多平台移动端应用程序。

  • 创建多平台 Kotlin 库讲授了如何创建一个可用于 JVM、 JS 以及原生平台的多平台库,可以在任何其他公共代码中使用该库(例如,与 Android 及 iOS 共享)。 还展示了如何编写会在所有平台上执行的测试,并使用特定平台提供的高效实现。

  • 使用 Kotlin 多平台构建全栈 web 应用通过构建一个利用共享代码、序列化以及其他多平台范式的客户端——服务器应用程序, 来讲授构建面向 Kotlin/JVM 与 Kotlin/JS 的应用程序背后的概念。还简要介绍了如何使用 Ktor 作为服务器端与客户端框架。

样例项目