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

相关推荐
方也_arkling25 分钟前
别名路径联想提示。@/统一文件路径的配置
前端·javascript
毕设源码-朱学姐27 分钟前
【开题答辩全过程】以 基于web教师继续教育系统的设计与实现为例,包含答辩的问题和答案
前端
web打印社区41 分钟前
web-print-pdf:突破浏览器限制,实现专业级Web静默打印
前端·javascript·vue.js·electron·html
RFCEO1 小时前
前端编程 课程十三、:CSS核心基础1:CSS选择器
前端·css·css基础选择器详细教程·css类选择器使用方法·css类选择器命名规范·css后代选择器·精准选中嵌套元素
Amumu121381 小时前
Vuex介绍
前端·javascript·vue.js
We་ct1 小时前
LeetCode 54. 螺旋矩阵:两种解法吃透顺时针遍历逻辑
前端·算法·leetcode·矩阵·typescript
2601_949480062 小时前
【无标题】
开发语言·前端·javascript
css趣多多2 小时前
Vue过滤器
前端·javascript·vue.js
理人综艺好会2 小时前
Web学习之用户认证
前端·学习
We་ct3 小时前
LeetCode 36. 有效的数独:Set实现哈希表最优解
前端·算法·leetcode·typescript·散列表