Duolingo 如何将 Android App 全部迁至 Kotlin

在过去的两年中 , Duolingo将其全部JavaAndroidApp无缝地迁移到Kotlin 。 它带来的主要好处包括提高了开发人员的工作效率和幸福感 , 而DuolingoApp几乎再也没有出现空指针异常(NPE)问题了 。 为了了解他们的迁移经验 , InfoQ与DuolingoAndroid和Web开发负责人Chaidarun进行了交流 。
自从谷歌宣布将Kotlin作为Android开发首选语言后 , 得益于其现代化的特性集 , JetBrains的这门语言吸引了越来越多的开发商 。 2018年 , 为了提高生产率、稳定性和开发人员的幸福感 , Duolingo(语言学习平台开发商)决定将Android开发迁移到Kotlin 。
正如DuolingoAndroid和Web开发负责人ArtChaidarun所解释的那样 , 向Kotlin的转换始于每个开发人员将一些Java代码移植到Kotlin , 并由更有经验的Kotlin开发人员承担导师角色 。 特别值得注意的是 , Duolingo工程师定义了pull请求工作流 , 尽可能简化转换过程中的管理工作 。 具体来说 , 对于每个转换后的源文件 , 开发人员需要生成至少三个pull请求:第一个PR包含IntelliJ自动转换的结果;第二个PR包含对自动转换所引入的编译错误的修复;第三个PR包含使代码更符合习惯的更改 。
根据Chaidarun的说法 , 转换到Kotlin后 , 代码行数减少了约30% , 最多的减少90% 。 最终 , DuolingoApp的稳定性得到了极大改善 , 大多数NullPointerExceptions和IllegalArgumentExceptions都来自第三方依赖项 , 它们没有采用Kotlin编译器的可空注解 。 为了了解他们的迁移经验 , InfoQ采访了Chaidarun 。
InfoQ:将App迁移到另一种语言需要付出巨大的努力 。 您认为使这一努力获得成功的关键实践是什么?
ArtChaidarun:最重要的一个因素是语言的选择:Kotlin与Java非常相似 , 也就是说 , 它既便于开发人员学习 , 也便于IDE自动转换Java代码 。 然而 , 将Java转换成Scala或将Objective-C转换成Swift时 , 情况就不太一样了 。 同样重要的是 , 我们从一开始就对照Java工具准备好了相应的Kotlin工具(格式化器和代码分析器) , 这加强了一致性并降低了切换成本 。
InfoQ:请您介绍下从Java自动转换到Kotlin的经验?您最常遇到的问题是什么?
Chaidarun:IntelliJ的自动转换器是这项工作的关键——如果没有它 , 我们甚至都不会尝试迁移 。 它非常安全 , 只在与反射相关的非常罕见的情况下才会导致运行时问题 。 最常见的问题是 , 为了兼容Java调用程序 , 我们必须手动将@JvmField和@JvmStatic注解添加到转换后的代码中 , 但这个事情做起来不难 。
InfoQ:您能总结一下提高开发人员满意度的主要因素吗?
【Duolingo 如何将 Android App 全部迁至 Kotlin】Chaidarun:与Java相比 , 属性、数据类和标准库扩展方法等特性极大地提高了Kotlin的信噪比 , 使得编写和检查代码变得更容易、更快速 。
如果你对细节感兴趣 , 可以看下Chaidarun在Duolingo博客上的报道 。
关注我并转发此篇文章 , 私信我“领取资料” , 即可免费获得InfoQ价值4999元迷你书!


    推荐阅读