澎湃Logo
下载客户端

登录

  • +1

Meta为何要将Android从Java转向Kotlin

2022-11-07 19:21
来源:澎湃新闻·澎湃号·湃客
字号

Facebook母公司Meta的工程师们,对多年以来将众多Android应用代码库从Java转换成Kotlin的体会做了一番认真总结。

对于Meta这样一家坐拥成千上万开发人员和多款大型Android应用程序(包括Facebook、Instagram、Messenger、Portal以及Quest VR头显)的企业来说,这无疑是一项艰巨的任务。

Facebook公司软件工程师Omer Strulovich指出:“把这些用Java开发的Android应用全面转换为Kotlin,确实不是件容易的事。”

但向Kotlin的迁移仍在进行当中,目前Meta公司的Android应用repo中已经包含上千万行Kotlin代码。

Strulovich解释称:“如今,我们的Facebook、Messenger以及Instagram等Android应用各自拥有超过100万行Kotlin代码,而且转换率仍在不断提升。我们Android代码库中的Kotlin代码总规模已经超过1000万行。”

Java是当前世界三大编程语言之一,在企业级应用程序领域处于主导地位;相比之下,Kotlin的人气显然无法与之相比,但也稳居榜单前二十。鉴于Meta自身的业务规模与极具份量的应用程序组合,这波从Java到Kotlin的Android应用转型不啻为一个里程碑。

尽管迁往Kotlin有种种好处,但Strulovich也列举了此番计划的一些显著缺点,至少对大型应用程序来讲确实存在不少风险。

首先,Java和Kotlin之间的人气水平仍有巨大差距,导致后者生态中的可用工具较少。另外,这些工具还必须考虑到Kotlin与Java之间的互操作性,这就让情况变得更为复杂。尽管两种语言间号称有100%的互操作性,但Meta还是发现自己不得不继续保留部分Java代码。

Strulovich指出:“Kotlin也是种流行语言,但跟Java相比,其流行度还远达不到同样的量级。Java是目前全球第二或第三大流行语言(具体取决于衡量标准),所以Kotlin的可用工具数量根本不可能与Java相提并论。更糟糕的是,所有Kotlin工具还要保证能跟Java实现互操作,这就让整个实现过程变得更加复杂。”

Meta还有另一个大问题需要关注:相较于Java,Kotlin的构建速度要慢得多。

“我们从一开始就知道Kotlin的构建速度不及Java。这不光是因为Kotlin及其生态系统更加复杂,还因为Java在编译器优化方面领先了20年。由于我们拥有多个大型应用程序,所以更慢的构建速度肯定会对我们的开发者体验产生负面影响。”

最后还有一点,Strulovich称HTTP客户端项目OkHttp在2019年完成了从Java到Kotlin的迁移。这是个体量很小的项目,只有24000行Kotlin代码。但即使如此,它的Java版本编译时长仅为2.4秒,而Kotlin版本则需要10.2秒。

Meta工程师决定将几乎所有代码全部转换为Kotlin,而没有选择保留大部分Java代码,只是用Kotlin编写新增代码。顺带一提,Linux内核项目和Android开源项目倒是选择了通过增量形式引入Rust代码的方式。

但Meta已经在GitHub上发布了好几款内部Kotlin转换工具,可供其他人直接使用,或者至少能激励大家积极寻求自己的自动化转换方案。这对整个Kotlin生态系统的健康发展和吸引力肯定不是坏事。

Facebook工程师们去年曾介绍称,虽然Kotlin并不难上手,但大规模采用也绝非易事。Facebook拥有自己的Buck构建系统,IntelliJ/Android Studio IDE使用的则是Gradle。

Strulovich还具体介绍了Meta贡献的几款开源Kotlin工具,例如能够让Kotlin获得“与Java对等开发体验”的Pygments库。Meta还开发了Ktfmt,一款面向IntelliJ和Android Studio的插件,能提供“符合google-java-format代码理念的决定性Kotlin格式化程序”。

Strulovich指出,截至目前,Meta的代码库体积平均缩小了11%。Google Home团队则报告称,在将新功能开发迁移至Kotlin之后,其应用程序的代码库也成功瘦身了33%。

Strulovich提到,“我们从网上看到的数字还要更高,但估计不同项目对应的具体瘦身比例可能有很大差异。但无论如何,我们对这个数字感到满意,因为里面删除的行通常是样板代码,Kotlin在这部分代码上确实比Java更优。”

Kotlin最初由JetBrains负责开发,即IntelliJ等开发者工具/IDE的开发商。自2017年以来,Google就一直使用Kotlin构建Android应用程序,并从2018年起联合JetBrains建立起了Kotlin基金会。

2019年,Google Android团队开始采用“Kotlin优先”方法。Google目前拥有70多个部分或全部由Kotlin构建的Android应用,包括Google Maps、Google Home、Google Play、Google Drive以及Google Messages。相较于Java,Google称Kotlin的效率更高、代码安全性更强、代码库体量更小,而且能跟Java实现100%互操作——这大大降低了两种代码的共存难度与旧代码转换门槛。

Google Kotlin产品经理James Ward对Meta的决定表示欢迎,“三年以来,Android一直是Kotlin开发的先行者,也带来了最出色的开发者体验,同时牢牢植根于Java及其生态的互操作性之上。所以,我们很高兴看到Meta能够迁移至Kotlin,并获得初步成功。不少Google团队也经历过类似的从Java到Kotlin的迁移之旅,涵盖Android到服务器端等领域,最终积累起超1100万行Kotlin代码(截至2022年10月)。Meta的案例,再次证明我们选择的这条从Java到Kotlin的迁移道路是正确的。”

    本文为澎湃号作者或机构在澎湃新闻上传并发布,仅代表该作者或机构观点,不代表澎湃新闻的观点或立场,澎湃新闻仅提供信息发布平台。申请澎湃号请用电脑访问http://renzheng.thepaper.cn。

    +1
    收藏
    我要举报
            查看更多

            扫码下载澎湃新闻客户端

            沪ICP备14003370号

            沪公网安备31010602000299号

            互联网新闻信息服务许可证:31120170006

            增值电信业务经营许可证:沪B2-2017116

            © 2014-2024 上海东方报业有限公司

            反馈