GMTC全球大前端技术大会(北京站)门票9折特惠截至本周五,点击立减¥480 了解详情
写点什么

Duolingo 如何将 Android App 全部迁至 Kotlin

2020 年 4 月 24 日

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 年 4 月 24 日 09:001153

评论

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

理财之我见

三石

理财 28天写作

redis中的一致性hash

原来不悔

redis 一致性hash

探索 React 合成事件

pingan8787

前端 React 28天写作

SpringBoot太强了、ShardingSphere上榜

云流

spring 编程 框架

字节跳动大佬整理的这份《算法中文手册》火了,不少小伙伴靠这份指南成功掌握了算法的核心技能,成功拿到了 BATJ等大厂offer。

Java成神之路

Java 程序员 架构 面试 编程语言

卧槽,牛皮了!某程序员苦刷这两份算法PDF47天,四面字节斩获心仪大厂offer!

Java成神之路

Java 程序员 架构 面试 编程语言

新的方式-谷歌浏览器插件的使用【天猫超市抢购飞天茅台】

谙忆

架构师训练营第七周作业

zamkai

智慧社区安防建设的功能,智慧社区建设方案

135深圳3055源中瑞8032

音频特征提取方法和工具汇总

行者AI

音视频

计算机网络基础

roadup

TCP 网络 HTTP 计算机 HTTP3.0

数智化浪潮之中,传统企业如何抓住转型机遇?

京东科技开发者

DevOps

助力金三银四跳槽季,《Java面试突击版》第四版强势来袭

Java架构之路

Java 程序员 架构 面试 编程语言

助力ARM生态 —Dragonwell新增aarch64支持

阿里云基础软件团队

两年Java开发经验,我凭借这份349页的《阿里Java面试通关手册》成功拿到字节跳动Offer。

Java成神之路

Java 程序员 架构 面试 编程语言

DAPP智能合约交易系统开发、DAPP系统开发的详细解释

W13902449729

DAPP智能合约交易系统开发 DAPP系统开发

python 输入输出

赵开忠

Python 28天写作

跨界

张老蔫

28天写作

前端性能优化

roadup

前端工程 性能调优

第1周架构方法总结

Richard

UML 需求分析 概要设计 软件架构设计 详细设计

花火交易所系统开发、雷达模式系统搭建开发

W13902449729

花火交易所系统开发 雷达模式系统搭建开发

12月阿里蚂蚁金服四面(已拿offer)Java技术面经总结:项目+源码+jvm调优+MySQL

云流

Java 学习 编程 程序员 面试

巧合?达摩院2021十大科技是十九世纪那场幻想的升级版?

Java架构师迁哥

重学JS | 改变函数上下文的3种方式

梁龙先森

前端 编程语言 28天写作

精选算法面试-队列

李孟

算法 队列 28天写作

凭借这份Java超硬核面试 “备战” 手册!我刚面试完字节跳动、阿里、华为、小米等后端岗位

Java架构之路

Java 程序员 架构 面试 编程语言

某Javva程序员金秋9月靠这份文档涨薪10K,你把这份Java进阶文档吃透涨薪超简单!

Java成神之路

Java 程序员 架构 面试 编程语言

跪了!Alibaba内部出品贼火的Java面试手册,全面对标蚂蚁金服、头条、拼多多等

Java架构之路

Java 程序员 架构 面试 编程语言

化妆品溯源系统开发,区块链防伪溯源

135深圳3055源中瑞8032

博弈论 - 海盗分金

石云升

博弈论 28天写作 海盗分金

不交“人脉”交朋友:新荣耀的底气与新机

脑极体

Duolingo如何将Android App全部迁至Kotlin-InfoQ