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

相关推荐
Mr Xu_12 小时前
告别冗长 switch-case:Vue 项目中基于映射表的优雅路由数据匹配方案
前端·javascript·vue.js
前端摸鱼匠12 小时前
Vue 3 的toRefs保持响应性:讲解toRefs在解构响应式对象时的作用
前端·javascript·vue.js·前端框架·ecmascript
lang2015092812 小时前
JSR-340 :高性能Web开发新标准
java·前端·servlet
好家伙VCC13 小时前
### WebRTC技术:实时通信的革新与实现####webRTC(Web Real-TimeComm
java·前端·python·webrtc
未来之窗软件服务14 小时前
未来之窗昭和仙君(六十五)Vue与跨地区多部门开发—东方仙盟练气
前端·javascript·vue.js·仙盟创梦ide·东方仙盟·昭和仙君
嘿起屁儿整14 小时前
面试点(网络层面)
前端·网络
VT.馒头14 小时前
【力扣】2721. 并行执行异步函数
前端·javascript·算法·leetcode·typescript
phltxy15 小时前
Vue 核心特性实战指南:指令、样式绑定、计算属性与侦听器
前端·javascript·vue.js
Byron070716 小时前
Vue 中使用 Tiptap 富文本编辑器的完整指南
前端·javascript·vue.js
css趣多多16 小时前
地图快速上手
前端