写点什么

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:001942

评论

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

深度解析首个Layer3 链 Nautilus Chain,有何优势?

西柚子

面试官:如何防止 Java 源码被反编译?我:有点懵

做梦都在改BUG

Java Java源码

厉害了!刷完这份 532 算法秘笈后,我成功斩获字节、快手offer

做梦都在改BUG

Java 数据结构 面试 算法

深度解析首个Layer3 链 Nautilus Chain,有何优势?

威廉META

量化合约系统开发(规则开发)丨量化合约开发(源码说明)

系统开发咨询1357O98O718

号外号外!简单几步就能把Pinterest视频下载到手机里啦!

frank

Pinterest

PyTorch深度学习实战 | PyTorch环境搭建

TiAmo

PyTorch

Spring Boot:如何配置Undertow容器?不会我教你 | 超级详细

Java你猿哥

spring Spring Boot 后端 ssm java

学会用规则引擎Drools,让你早点下班

JAVA旭阳

Java drools

阿里内网开源:多位大佬联合撰写的Java多线程手册被我拿到了

做梦都在改BUG

Java 多线程

死磕Spark事件总线——聊聊Spark中事件监听是如何实现的

做梦都在改BUG

Java 大数据 spark 事件监听

从设计角度,深入分析 Spring 循环依赖的解决思路

做梦都在改BUG

Java spring源码 循环依赖

fcpx专业多媒体剪辑软件:Final Cut Pro X中文激活版

真大的脸盆

Mac 视频剪辑 视频处理 视频剪辑处理

dapp/lp代币合约流动性质押挖矿分红系统开发详细及案例(源码部署)

系统开发咨询1357O98O718

苹果办公必备远程工具:Royal TSX使用教程

Rose

SSH Royal TSX 教程 Royal TSX 破解 Royal TSX mac下载

深度解析首个Layer3 链 Nautilus Chain,有何优势?

股市老人

学会用规则引擎Drools,让你早点下班

小小怪下士

Java 程序员 后端 drools

为什么 Go 语言 struct 要使用 tags

AlwaysBeta

Go

BetterSnapTool for Mac 帮你整理窗口,提升效率

Rose

BetterSnapTool 窗口管理软件 mac软件下载

解决mac电脑打开应用“意外退出”的问题 (点按“重新打开”以再次打开应用程序)

Rose

意外退出 Mac软件

深度解析首个Layer3 链 Nautilus Chain,有何优势?

鳄鱼视界

Kotlin 学习笔记(一)

修之竹

android kotlin

EasyRcovery16免费电脑照片数据恢复软件

茶色酒

EasyRcovery16

热点面试题:Vue2、3 生命周期及作用?

沉浸式趣谈

JavaScript 生命周期 Vue 3 vue2 前端面试题

CorelDRAW2023最新版本平面矢量绘图排版软件

茶色酒

CorelDraw2023

Guitar Pro8吉他学习辅助软件

茶色酒

Guitar Pro8

DAPP马蹄链智能合约系统开发(开发方案及详细)

系统开发咨询1357O98O718

云边端协同时序数据库的挑战与解决方案

CnosDB

时序数据库 开源社区 CnosDB 云边端协同

这份Java面试八股文让329人成功进入大厂,堪称2023最强

Java你猿哥

Java 面经 春招 八股文 Java八股文

三天吃透RabbitMQ面试八股文

程序员大彬

Java RabbitMQ 消息队列

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