网易首页 > 网易号 > 正文 申请入驻

2024 Google I/O 宣布正式支持 Kotlin Multiplatform ,那 KMP 是什么?它的未来在哪里?

0
分享至

基于最近一直有人和我提 KMP ,那就简单聊聊。

2024 Google I/O 正式官宣了支持 KMP ,而一般意义上的 KMP 指的就是 Kotlin Multiplatform ,它是 Google Workspace 团队的一项长期「投资」项目,这里有个重点,那就是Kotlin Multiplatform 由 JetBrains 开发维护和开源的项目,简单来说,JetBrains 主导,Google Workspace 投资并提供技术支持。

原理上,Kotlin Multiplatform 通过将 Kotlin 编译为平台原生的二进制文件,从而提供跨平台共享代码的目的,应用场景上 :

❝ Forbes 就提到过,他们通过 Kotlin Multiplatform 在 iOS 和 Android 上共享 80% 以上的逻辑,而麦当劳也曾提到过,他们采用了 Kotlin Multiplatform 开发全球移动应用。

当然,这里需要说的是,Kotlin Multiplatform 和 Compose Multiplatform 虽然都是 JetBrains 维护的项目,它们经常被一起提及,但是他们其实是两个项目

  • Kotlin Multiplatform:提供了底层逻辑的跨平台,为 Compose Multiplatform 提供了基础支撑

  • Compose Multiplatform:Compose UI 的跨平台框架,提供 UI 跨平台能力

用 JB 官方的话说就是:借助 Compose Multiplatform,开发者可以将 Kotlin Multiplatform 的代码共享能力推向应用逻辑之外

❝ 其实从另一方面讲,Kotlin Multiplatform 的目的并不是消除所有特定于平台的代码,它更多是提供了一种代码重用最大化的方式,同时允许灵活地进行特定于平台的优化和定制,很好的例子就是 iOS 上协程是通过 SKIE 实现支持。

所以如果有一个 Android App 想运行到 iOS 上,那么你会经历的逻辑就是:

  • UI 部分逻辑通过 Compose Multiplatform 实现跨平台,如果你是 Compose UI ,那么需要调整的不会很多。

  • 业务逻辑通过 Kotlin Multiplatform 来跨平台,需要注意你使用的一些库,例如androidx.*是否已经支持到了 Kotlin Multiplatform

❝ PS,现在 iOS 上的 Compose Multiplatform 同样支持了集成 iOS 原生的 UIKit 和 SwiftUI ,例如可以通过 UIKitView 集成 iOS 的 UIKit 元素 。

正如本次 I/O 上所说,Google 和 JetBrains/Kotlin 开发者社区合作,为许多 Jetpack 库添加了 Kotlin 多平台支持,并在某些情况下提供 iOS 平台目标,例如:

  • Ktor 通过处理 REST 服务消耗来简化网络任务,

  • kotlinx.serialization 将数据转换为 JSON 等格式

  • Okio 管理基本的文件 I/O

  • SKIE 适配了类型和协程在 iOS 上的使用

  • CocoaPods 集成支持使用 iOS 特定的依赖项

另外,Annotations、Collections 和 DataStore 库都在稳定版本中支持 Kotlin Multiplatform,另外还添加了对验证 iOS 平台目标的二进制兼容性的支持,使其与 Android 的标准保持一致。

除了上面的库之外,目前还在致力于为 Room、 Lifecycle 和 ViewModels 提供 Kotlin 多平台支持,并且现已提供 alpha 版本。

最后 Android Gradle 插件现在正式支持 Kotlin Multiplatform,可以使用简洁的构建定义将 Android 设置为共享代码的平台目标,如下所示:

plugins {
    id("org.jetbrains.kotlin.multiplatform")
    id("com.android.library")
}

kotlin {
    androidTarget {
        compilations.all {
            kotlinOptions {
                jvmTarget = "11"
            }
        }
    }  
    listOf(
        iosX64(),
        iosArm64(),
        iosSimulatorArm64()
    ).forEach { iosTarget ->
        iosTarget.binaries.framework {
            baseName = "Shared"
            isStatic = true
        }
    }    
    sourceSets {
        commonMain.dependencies {
             // put your Multiplatform dependencies here 
        }
    }

当然,也有一些其他问题,例如不少第三方库没有实现支持,例如 Dagger#3916 里所说的,Dagger/Hilt 仍然面临修复 KSP 支持的问题,他们目前还没有计划支持 KMP。

当然对于 DI 现在也有类似替代框架,例如:

  • Koin

  • Kodein

  • kotlin-inject

  • Koject

  • DI.kt

  • PopKorn

最重要的是,JB 现在提供了包发布和检索网站:https://package-search.jetbrains.com/,这是跨平台必备的社区支撑,类似 npm、pub 平台,这对于 Kotlin Multiplatform 生态的重要性不言而喻。

至于使用了 Kotlin Multiplatform 的知名企业,目前已知的有:

  • 麦当劳

  • netflix

  • PHILIPS

  • 百度

  • Meetup

  • VMware

最后,其实今年 I/O ,Android 和 Flutter 的 PM 还联合发布了一篇文章 《让开发者更轻松地进行跨平台开发》 ,文章里面就提到了:最适合你业务的的才是最重要的

基于这篇内容,简单总结就是:

  • Kotlin 和 Jetpack Compose 是 Android 开发的首选。

  • KMP 将 Kotlin 编译为特定于平台的二进制文件(如 Android、iOS、JVM、WASM),所以你可以用最小的开销调用特定于平台的 API,并利用 Compose MultiPlatform 实现 UI 。

  • Flutter 更多是提供所有平台上业务和 UI 代码的一致,它不特定于平台。

所以,很多时候大家可能觉得它们是你死我活的局面,但是更多来说,它们的维护主体和关注的群体都不一样

最后,我相信很多老 Android 都还在用 XML 布局,这并没有什么问题,但是声明式 UI 基本在客户端已经是主流了,Compose 、Flutter、React Native、SwiftUI 、ArkUI 都表明了声明式 UI 是这个时代的选择

不过还是那句话,能完成业务才是最重要的,技术“新不新“”牛不牛“都是其次,重要的还是业务赚不赚钱,产品是否有前景,企业是否提供岗位,毕竟我们都不是技术驱动的公司,技术并不盈利

更多参考资料:

  • https://github.com/android/kotlin-multiplatform-samples

  • https://android-developers.googleblog.com/2024/05/android-support-for-kotlin-multiplatform-to-share-business-logic-across-mobile-web-server-desktop.html

  • https://developers.googleblog.com/en/making-development-across-platforms-easier-for-developers/


--- END ---

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
零容忍!陕西多地正在严查 →

零容忍!陕西多地正在严查 →

黄河新闻网吕梁
2026-05-26 11:05:45
蹇韬接近加盟国安!球迷建议蓉城提前引进马镇入替,值得期待

蹇韬接近加盟国安!球迷建议蓉城提前引进马镇入替,值得期待

懂个球
2026-05-27 00:13:17
李家风波再爆重磅新料!东周刊独家曝光李家鼎女友是马贯东母亲,与李泳豪因财产激烈争执

李家风波再爆重磅新料!东周刊独家曝光李家鼎女友是马贯东母亲,与李泳豪因财产激烈争执

TVB资讯台
2026-05-26 23:00:25
中纪委怒批高校“四宗罪”,每一刀都切在要害上

中纪委怒批高校“四宗罪”,每一刀都切在要害上

细说职场
2026-05-24 15:32:38
半导体大佬集体减持后,杭州豪宅被抢疯了!

半导体大佬集体减持后,杭州豪宅被抢疯了!

樱桃大房子
2026-05-25 21:52:46
广厦输G1揪出罪魁祸首!王博调整能力太差,迷信两人,葬送好局

广厦输G1揪出罪魁祸首!王博调整能力太差,迷信两人,葬送好局

南海浪花
2026-05-27 07:27:23
检出三聚氰胺?博主举报网红品牌,企业回应

检出三聚氰胺?博主举报网红品牌,企业回应

山东教育电视台
2026-05-27 07:38:58
56岁J.Lo穿回25年前同款牛仔裤,身材一点没变

56岁J.Lo穿回25年前同款牛仔裤,身材一点没变

影视情报室
2026-05-26 00:08:42
一人毁掉整部剧?央视剧《主角》唯一败笔,观众:看他演戏真别扭

一人毁掉整部剧?央视剧《主角》唯一败笔,观众:看他演戏真别扭

调侃国际观点
2026-05-26 21:23:44
美债稳如泰山:1/3利息付给了白宫,财政收入增速远快于债务累积

美债稳如泰山:1/3利息付给了白宫,财政收入增速远快于债务累积

子业一说财经
2026-05-26 09:53:31
“扶弟魔”升级版!妻子因丈夫拒每月拿2000元帮弟还车贷,离婚了

“扶弟魔”升级版!妻子因丈夫拒每月拿2000元帮弟还车贷,离婚了

火山詩话
2026-05-26 07:27:35
一个特别的时代,瓜迪奥拉与曼城生涯20座奖杯合影留念

一个特别的时代,瓜迪奥拉与曼城生涯20座奖杯合影留念

懂球帝
2026-05-26 19:59:17
62岁尼古拉斯·凯奇自曝:拒绝诺兰后电话再也打不通

62岁尼古拉斯·凯奇自曝:拒绝诺兰后电话再也打不通

生活观察员啊
2026-05-26 00:49:27
新华社连发两问!

新华社连发两问!

极目新闻
2026-05-26 15:46:13
“发给父母的相亲照能逆天到啥程度??”哈哈哈哈哈好一个艺高人胆大!!

“发给父母的相亲照能逆天到啥程度??”哈哈哈哈哈好一个艺高人胆大!!

脆皮先生
2026-05-26 20:22:19
悲哀!10人小群里剩自己“干净”,30岁女生称身体忠于丈夫被孤立

悲哀!10人小群里剩自己“干净”,30岁女生称身体忠于丈夫被孤立

番外行
2026-05-20 08:19:19
《主角》结局:易青娥苦尽甘来,花彩香放下执念,米兰结局最意外

《主角》结局:易青娥苦尽甘来,花彩香放下执念,米兰结局最意外

秋姐居
2026-05-26 19:49:50
上海怎么得到他?古德温狂轰34分7板12助征服主场球迷全场高呼MVP

上海怎么得到他?古德温狂轰34分7板12助征服主场球迷全场高呼MVP

狼叔评论
2026-05-26 21:54:08
越闹越大!庾澄庆不满自己被淘汰,公开内涵《歌手》节目组引争议

越闹越大!庾澄庆不满自己被淘汰,公开内涵《歌手》节目组引争议

孤芳自赏的小李
2026-05-27 06:52:27
被封锁超过6周,伊朗岌岌可危:损失巨大,经济濒于崩溃

被封锁超过6周,伊朗岌岌可危:损失巨大,经济濒于崩溃

高博新视野
2026-05-26 07:30:16
2026-05-27 08:23:00
君伟说
君伟说
分享职场故事
438文章数 48关注度
往期回顾 全部

科技要闻

狂飙19%!美光科技市值破万亿美元

头条要闻

食客吃完面往剩汤中加6勺辣椒酱 被店家不打码发网上

头条要闻

食客吃完面往剩汤中加6勺辣椒酱 被店家不打码发网上

体育要闻

上赛季差点降入英甲,下赛季要踢英超了

娱乐要闻

台媒贴脸!S妈被问大S嗑药当场沉默

财经要闻

中国铝行业爆单 下一个“煤炭”大周期?

汽车要闻

涉水加强 福特烈马亚马逊限量版上市 售价39.98万

态度原创

本地
数码
房产
时尚
公开课

本地新闻

用云锦的方式,打开江苏南京

数码要闻

苹果macOS 26.6开发者预览版Beta 1发布

房产要闻

招商地产接盘碧桂园!海口这个烂尾豪宅,要彻底改命?

蓝色系穿搭太适合夏天了!快来看看这些穿搭示范,美得不重样

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版