放弃 Java,Meta 旗下 Android 应用转投 Kotlin,称比 Java 更好用!
根据 Meta 官网博客消息,Meta 正在将其 Android 应用的 Java 代码迁移至 Kotlin,Meta 表示,相比 Java,Kotlin 有一些关键优势。截至目前,其 Android 代码库已有超过 1000 万行 Kotlin 代码。
Android 开发首选语言:Kotlin
2011 年 7 月,JetBrains 正式推出 Kotlin 编程语言,这是一款用于现代多平台应用的静态编程语言,Kotlin可以编译成 Java 字节码,也可以编译成JavaScript,方便在没有 JVM 的设备上运行。与 Java 相比,Kotlin 的语法更简洁,同时也提供更多的特性支持,比如高阶函数、字符串模板等等。Kotlin 自发布起就一直被拿来与 Java 比较,谷歌的两次举动才彻底让 Kotlin 站稳脚跟。
在 2017 年 Google I/O 大会上,谷歌宣布在 Android Studio IDE 中支持 Kotlin,两年后的 2019 年 Google I/O 大会上,谷歌正式宣布 Kotlin 是 Android 应用程序的开发人员的首选语言。
谷歌之所以支持 Kotlin,除了 Kotlin 基础特性的优势外,其与 Oracle 的 Java 侵权案也是主要因素。
2010 年,Oracle 认为谷歌在 Android 系统上无偿使用了 37个 Java APIs,侵犯了他们的专利;在 Android 中还有 9 行代码抄袭了 Java,侵犯了他们的版权。虽然最终 Oracle 败诉,但在谷歌与 Oracle 这长达八九年的对决中,谷歌也并不是胜利者。
2017 年之后,谷歌便将希望寄托在 Kotlin 之上,先是将 Kotlin 集成到 Android Studio,而后陆续推出 Android KTX(帮助 Kotlin 代码更简洁)、Android Jetpack(全面兼容 Kotlin),最后在 2019 年宣布 Kotlin 成为 Android 开发首选语言,并鼓励安卓开发者从 Java 迁移至 Kotlin。
2019 年 I/O 大会,谷歌也宣布其 Android 团队采用了“Kotlin-first”的方法。谷歌拥有 70 多个至少部分使用 Kotlin 构建的 Android 应用,包括地图、家庭、Play 商店、云端硬盘等。谷歌表示,与 Java 相比,Kotlin 更高效,可以生成更安全的代码和更小的代码库,并且与 Java 语言 100% 可互操作,通过允许它们共存,使从 Java 代码库的转换变得更容易。
Meta Android 代码迁移进行时
Meta 同样对 Kotlin 感兴趣,Facebook 软件工程师 Omer Strulovich 称,他们已经在用 Kotlin 替换其几个流行的 Android 应用中的 Java 代码,包括 Facebook、Instagram、Messenger、Portal 和 Quest 等。截至目前,Facebook、Messenger 和 Instagram 的 Android 应用程序都有超过 100 万行的 Kotlin 代码。Meta 的 Android 代码库总共已包含有超过 1000 万行的 Kotlin 代码。
Strulovich 说到:“Kotlin 被普遍认为是比 Java 更好的语言,在每年的 Stack Overflow 开发者调查报告中,Kotlin 的好评率也高于 Java”,他表示,Kotlin 已经成为 Android 开发的流行语言,“因此,我们将 Meta 的 Android 开发转向 Kotlin 是合理的。”
尽管 Kotlin 有许多好处促使 Meta 进行迁移,但 Strulovich 也提到了一些 Kotlin 明显的缺点,这些缺点使迁移具有一定的风险,至少对于大型应用程序而言是这样。
首先,Java 和 Kotlin 在流行度上的巨大差距导致后者使用的工具较少,而且这些工具必须考虑到 Kotlin 与 Java 的互操作性,因此非常复杂。尽管这两个语言具有 100% 的互操作性,但 Meta 发现它无法删除所有 Java 代码。
“Kotlin 是一种流行的语言,但与 Java 相比,流行程度的差距很明显。Java 是世界上第二或第三流行的语言(取决于如何衡量这一点)。这意味着 Kotlin 可用的工具更少。更糟糕的是,所有的 Kotlin 工具需要考虑 Kotlin 和 Java 的互操作性,这使得它们的实现变得复杂”,Strulovich 指出。
但 Meta 最大的担忧还是在另一方面,相对于 Java,Kotlin 的构建时间较慢。
“我们从一开始就知道 Kotlin 的构建时间会比 Java 长,Java 在优化其编译器方面领先了 20 年。由于我们拥有多个大型应用程序,更长的构建时间可能会对我们开发人员的体验产生负面影响。”
Strulovich 举了 HTTP 客户端项目 OkHttp 在 2019 年从 Java 切换到 Kotlin 之后的编译时间对比的例子。OkHttp 很小,只有 24000 行 Kotlin。它在 Java 中的编译时间为 2.4 秒,而在 Kotlin 中为 10.2 秒,5 倍左右的差距。
权衡利弊后,Meta 还是认为将其众多 Android 应用程序的代码库从 Java 转换为 Kotlin 并将其迁移过程及经验分享出来。
谷歌的 Kotlin 产品经理 James Ward 对 Meta 的举动表示欢迎:“三年来,Android 一直以 Kotlin 为先,因为它为我们提供了最好的开发者体验,同时在 Java 及其生态系统的基础上进行构建并与之互操作,”他说到:“因此,我们很高兴看到 Meta 向 Kotlin 迁移,并且很高兴他们取得了成功。许多 Google 团队也经历了从 Java 到 Kotlin 的类似旅程,截至 2022 年 10 月,最终达到超过 1100 万行的 Kotlin 代码。其他大型项目进行类似的旅程再次确认了我们选择的道路。”
参考链接:
https://engineering.fb.com/2022/10/24/android/android-java-kotlin-migration
— 推荐阅读 —