为什么 Google 同时投资 Kotlin Multiplatform 和 Flutter

基础概念

首先,我最近了解到有两个不同的概念:

  • KMP (Kotlin Multiplatform) :Kotlin 多平台
  • CMP (Compose Multiplatform) :Compose 多平台

这两个方案都提供跨平台解决方案,能够与 Flutter 竞争。

  • KMP 编译成 Objective-C(用于 iOS)或 WebAssembly(用于 Web)。
  • CMP 使用 Skia 在 Canvas 上渲染 KMP 组件,这与 Flutter 的渲染方式相同。

KMP 和 CMP 由 JetBrains 开发。尽管 Google 和 JetBrains 关系密切,但 JetBrains 是一家独立的公司,没有被 Google 收购的计划。


为什么 Google 同时押注 Kotlin 和 Flutter

Google 大力推广 Kotlin 作为 Android 的首选语言。他们与 JetBrains 合作,正式确定了其官方地位,付出了巨大的努力。

但同时,他们也投入了大量资源用于 Flutter 和 Dart 的跨平台开发。

这到底是怎么回事?

这不是一个"总体规划"

事实是------Google 并没有一个宏大、统一的战略,将所有东西像拼图一样完美地组合在一起。我知道,我们总期望科技巨头能有这种精妙的 20 年路线图,但这并不是 Google 的运作方式。

Google 内部的不同团队在解决不同的问题。

  • Android 团队需要一种比 Java 更好的语言,Kotlin 是显而易见的替代品。
  • 同时,其他团队需要跨平台解决方案,能够运行在从机顶盒到智能显示器等所有设备上。

实际上,Flutter 最初是为了解决 Google 内部一些非常具体的问题而诞生的。Google Fiber 需要一种比原生 OpenGL 更好的方案来应对低端机顶盒。Google Home Hub 团队则在努力解决 WebView 在微小设备上占用过多内存的问题。

为什么 Kotlin 对 Android 如此合理

我们必须承认------Android 曾经被 Java 困住,而 Java 的体验并不理想。但你又不能简单地扔掉数百万个现有的应用程序,对吗?

Kotlin 的巧妙之处在于它是一种"覆盖"语言。 它运行在现有的 JVM 上,因此旧的 Java 代码和新的 Kotlin 代码可以和谐共存。开发者可以逐步迁移,而不会破坏整个系统。这与切换到像 Dart 这样完全不同的技术栈相比,要温和得多。

Flutter 填补了完全不同的空白

Google 需要一种真正的跨平台解决方案------不仅是 Android 和 iOS,还包括 Web、桌面,以及各种你叫得出名字的嵌入式设备。

Flutter 的设计初衷不是取代原生 Android 开发。它的目的是让你编写一次,随处运行,包括那些没有原生 UI 框架可言的奇特设备。

大型科技公司的混乱现实

大公司的协调性并不像我们想象的那么好。Google 内部有许多团队在发布产品,并非所有事情都需要通过 Sundar Pichai(Google CEO)。没有哪一个人能把公司所做的所有事情都装在脑子里。

这很混乱吗?是的,绝对是。但也许正是这种混乱,也成就了 Google 的持续创新。团队可以独立进行实验,而无需等待十个不同委员会的批准。

Apple 的做法则有所不同------以前一切都围绕史蒂夫·乔布斯运转,你可以看到一个统一的愿景。但 Google 的方法有它自己的优势,即使从外部看起来很令人困惑。

甲骨文的诉讼案

这个问题还有一个容易被大家遗忘的部分:Google 曾因在 Android 上使用 Java 而与甲骨文(Oracle)陷入巨大的法律纠纷。那场诉讼给 Google 带来了寻找替代方案的巨大压力。

Flutter 和整个 Fuchsia OS 项目在一定程度上就是一种保险策略。 如果 Google 输了官司,他们就需要完全不依赖 Java 的平台。

但后来 Google 赢得了诉讼。突然之间,压力解除了。他们可以继续在 Android 上使用 JVM,而不用担心甲骨文在耳边抱怨。

为什么两者可能会长期并存

我认为无论是 Kotlin 还是 Flutter 都不会消失。

  • Android 拥有数百万建立在 JVM 上的应用------你不可能一夜之间抛弃这个遗产。Kotlin 在保持兼容性的同时,为开发者提供了一种现代语言。
  • Flutter,另一方面,目前是一种更简单、更先进的跨平台解决方案,拥有出色的开发者体验。

Google 在自己的应用中大量使用 Flutter:Google Pay、Google Earth、Google Ads、Google Classroom、YouTube Create、Google One、FamilyLink、Crowdsource、Google Analytics、Readalong,以及 Fitbit Ace 等等。

我见过开发者对 Google 没有选定一个方案而感到沮丧。但坦率地说,我认为为不同的工作准备多种工具是合理的。你不会批评一个木匠同时拥有锤子和螺丝刀。

这对开发者的意义

如果你正努力在 Kotlin 和 Flutter 之间做出选择,不要把它看作是一个非此即彼的决定。它们是针对不同工作的工具。

  • 如果你正在构建一个对性能要求高、需要深度平台集成的 Android 应用? Kotlin 可能是你最好的选择。
  • 如果你是一名独立开发者或小团队,需要从零开始快速发布到多个平台? Flutter 是正确的方向。
  • 如果你想为现有的 Android 应用重写 iOS 和 Web 版本? 使用 KMP 和/或 CMP 可能比用 Flutter 创建一个全新的代码库更经济。

Google 不会通过淘汰其中一个来帮你做出选择。两者都有强大的理由存在,并且都在为真正的开发者解决实际问题。

相关推荐
Learner5 分钟前
Python异常处理
java·前端·python
tao3556678 分钟前
VS Code登录codex,报错(os error 10013)
java·服务器·前端
军军君0112 分钟前
Three.js基础功能学习七:加载器与管理器
开发语言·前端·javascript·学习·3d·threejs·三维
JarvanMo14 分钟前
情迷服务器驱动 UI:我在 Flutter 开发中的爱与哀愁
前端
tzy23317 分钟前
分享一个 HTTP(S) 代理&抓包工具,拦截和Mock Web客户端请求和服务端响应
前端·网络协议·http
代码小学僧23 分钟前
普通前端仔的 2025 : 年终总结与 AI 对我的影响
前端·程序员·ai编程
Mike_jia29 分钟前
TCP 粘包/拆包问题
前端
沐墨染36 分钟前
敏感词智能检索前端组件设计:树形组织过滤与多维数据分析
前端·javascript·vue.js·ui·数据挖掘·数据分析
Kagol38 分钟前
🎉TinyPro v1.4.0 正式发布:支持 Spring Boot、移动端适配、新增卡片列表和高级表单页面
前端·typescript·开源
李少兄39 分钟前
B/S 架构:现代 Web 应用的核心架构模式
前端·架构·b/s