写点什么

Duolingo 如何将 Android App 全部迁至 Kotlin

  • 2020-04-24
  • 本文字数:1171 字

    阅读完需:约 4 分钟

Duolingo如何将Android App全部迁至Kotlin

在过去的两年中,Duolingo将其全部Java Android App无缝地迁移到Kotlin。它带来的主要好处包括提高了开发人员的工作效率和幸福感,而 Duolingo App 几乎再也没有出现空指针异常(NPE)问题了。为了了解他们的迁移经验,InfoQ 与 Duolingo Android 和 Web 开发负责人 Chaidarun 进行了交流。


自从谷歌宣布将Kotlin作为Android开发首选语言后,得益于其现代化的特性集,JetBrains的这门语言吸引了越来越多的开发商。2018 年,为了提高生产率、稳定性和开发人员的幸福感,Duolingo(语言学习平台开发商)决定将 Android 开发迁移到 Kotlin。


正如 Duolingo Android 和 Web 开发负责人 Art Chaidarun 所解释的那样,向 Kotlin 的转换始于每个开发人员将一些 Java 代码移植到 Kotlin,并由更有经验的 Kotlin 开发人员承担导师角色。特别值得注意的是,Duolingo 工程师定义了 pull 请求工作流,尽可能简化转换过程中的管理工作。具体来说,对于每个转换后的源文件,开发人员需要生成至少三个 pull 请求:第一个 PR 包含 IntelliJ 自动转换的结果;第二个 PR 包含对自动转换所引入的编译错误的修复;第三个 PR 包含使代码更符合习惯的更改。


根据 Chaidarun 的说法,转换到 Kotlin 后,代码行数减少了约 30%,最多的减少 90%。最终,Duolingo App 的稳定性得到了极大改善,大多数 NullPointerExceptions 和 IllegalArgumentExceptions 都来自第三方依赖项,它们没有采用 Kotlin 编译器的可空注解。为了了解他们的迁移经验,InfoQ 采访了 Chaidarun。


InfoQ:将 App 迁移到另一种语言需要付出巨大的努力。您认为使这一努力获得成功的关键实践是什么?


Art Chaidarun:最重要的一个因素是语言的选择:Kotlin 与 Java 非常相似,也就是说,它既便于开发人员学习,也便于 IDE 自动转换 Java 代码。然而,将 Java 转换成 Scala 或将 Objective-C 转换成 Swift 时,情况就不太一样了。同样重要的是,我们从一开始就对照 Java 工具准备好了相应的 Kotlin 工具(格式化器和代码分析器),这加强了一致性并降低了切换成本。


InfoQ:请您介绍下从 Java 自动转换到 Kotlin 的经验?您最常遇到的问题是什么?


Chaidarun:IntelliJ 的自动转换器是这项工作的关键——如果没有它,我们甚至都不会尝试迁移。它非常安全,只在与反射相关的非常罕见的情况下才会导致运行时问题。最常见的问题是,为了兼容 Java 调用程序,我们必须手动将 @JvmField 和 @JvmStatic 注解添加到转换后的代码中,但这个事情做起来不难。


InfoQ:您能总结一下提高开发人员满意度的主要因素吗?


Chaidarun:与 Java 相比,属性、数据类和标准库扩展方法等特性极大地提高了 Kotlin 的信噪比,使得编写和检查代码变得更容易、更快速。


如果你对细节感兴趣,可以看下 Chaidarun 在 Duolingo 博客上的报道。


原文链接:


How Duolingo Migrated its Android App to 100% Kotlin


2020-04-24 09:001778

评论

发布
暂无评论
发现更多内容

详解 Flink 实时应用的确定性

Apache Flink

flink

Week06

熊威

架构学习第六周作业

乐天

分布式RDBMS和NoSQL

LEAF

【架构师训练营】第六周总结

Mr.hou

极客大学架构师训练营

学会使用Vue JSX,一车老干妈都是你的

前端有的玩

Java Vue 大前端 技巧 React

CAP原则

熊威

CAP原理简介

elfkingw

「架构师训练营」第 6 周作业 - 总结

森林

聊聊服务灾备

老胡爱分享

分布式架构 服务设计

解析软件系统稳定性的三大秘密

华为云开发者联盟

开发者 软件开发 稳定性 系统 探索与实践

架构师训练营第六周命题作业

whiter

极客大学架构师训练营

CAP

东哥

CAP

分布式KV存储临时失效时序图

LEAF

架构师训练营第六周作业

sunnywhy

架构师训练营第6周作业

饶军

总结

Kiroro

架构师训练营第6周总结:数据库分片,Hbase和ZooKeeper

hifly

zookeeper Cassandra 极客大学架构师训练营 HBase

喜讯!众盟科技获ADMIC 2020金璨奖“年度汽车数字化营销供应商”殊荣

人称T客

架构师训练营」第 6 周作业

edd

极客大学架构师训练营

Doris临时失效处理过程的UML时序图

周冬辉

架构师训练营第六周总结

王铭铭

一个成都程序猿写于离开北京一周年与26岁生日的这一天

why技术

生活 程序人生 北漂 成都

Kafka 是如何建模数据的?

tison

大数据 kafka

架构师训练营第六周学习总结

whiter

极客大学架构师训练营

「架构师训练营」第 6 周作业 - CAP

森林

架构师训练营第六周总结

sunnywhy

CAP

Kiroro

猿灯塔:spring Boot Starter开发及源码刨析(六)

猿灯塔

学习总结 - 第 6 周

饶军

架构师训练营第六周作业

王铭铭

Duolingo如何将Android App全部迁至Kotlin_移动_Sergio De Simone_InfoQ精选文章