为什么 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 不会通过淘汰其中一个来帮你做出选择。两者都有强大的理由存在,并且都在为真正的开发者解决实际问题。

相关推荐
Hello.Reader3 小时前
Flink 容错从状态后端到 Exactly-Once
前端·javascript·flink
小菜全3 小时前
《前端开发中常用的快捷键大全》
前端
努力往上爬de蜗牛3 小时前
安装npm install vuedraggable@next报错
前端·npm·node.js
YAY_tyy3 小时前
Three.js 开发实战教程(四):相机系统全解析与多视角控制
前端·javascript·3d·教程·three.js
IT_陈寒3 小时前
Redis性能提升30%的秘密:5个被低估的高级命令实战解析
前端·人工智能·后端
excel4 小时前
全面解析 JavaScript 内置 Symbol 方法(含示例)
前端
excel4 小时前
一文搞懂 Vue 的双向绑定
前端
卡布叻_星星9 小时前
前端JavaScript笔记之父子组件数据传递,watch用法之对象形式监听器的核心handler函数
前端·javascript·笔记
开发加微信:hedian11610 小时前
短剧小程序开发全攻略:从技术选型到核心实现(前端+后端+运营干货)
前端·微信·小程序