阿里云飞天发布时刻上新 了解详情
写点什么

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

评论

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

2024杭州国际轴承及装备展览会

吹吹晚风

华为云WeLink——助力企业数字化办公降本增效,提升竞争力

轶天下事

安全是企业数字化的基石,华为云WeLink如何构建数字化办公护盾

轶天下事

从头学Java17-Lambda表达式

烧霞

Lambda java17

迭代失败的4个迹象,团队中了几个?快来看看如何解决!

敏捷开发

项目管理 Scrum 迭代 开发人员

2024杭州国际切削工具装备展览会

吹吹晚风

自动化回归测试平台 AREX 0.4.0 版本发布

AREX 中文社区

开源 自动化测试 接口测试

云上办公时代,华为云会议如何保障企业的开会效率与数据安全?

轶天下事

内卷时代如何上云,华为云Web及移动App上云又有何亮点?

YG科技

大模型之Huggingface初体验

程序员架构进阶

Transformer 大模型 7月日更 7月月更 huggingface

稳定性和高可用如何兼顾,华为云网站高可用解决方案满足多方案需求

轶天下事

与 TDengine 性能直接相关——3.0 的落盘机制优化及使用原则

爱倒腾的程序员

涛思数据 tdengine 时序数据库

数字化办公需求激增,华为云桌面解锁全新云办公模式

轶天下事

2024杭州国际嵌入式系统展览会

吹吹晚风

AntDB数据库将携创新性解决方案亮相2023可信数据库发展大会

亚信AntDB数据库

数据库 AntDB AntDB数据库

华为云桌面正协助企业快速进入云上数字化办公时代

轶天下事

从头学Java17-Modules模块

烧霞

modules java17

给新手产品经理的技术接口文档入门指南

Liam

产品 程序员 接口 API接口文档

2023上海国际电子浆料及新型浆料展览会

吹吹晚风

企业数字化办公,华为云WeLink为何能脱颖而出

轶天下事

前端常见的十种布局

EquatorCoco

前端 前端前端框架

Databend v1.2 版本发布!Data + AI

Databend

网页直播源码知识分享:“直播卫士”,查杀病毒功能在此!

山东布谷科技

软件开发 直播 源码搭建 网页开发 直播源码

穷人版生产力工具,好用得飞起 「GitHub 热点速览」

EquatorCoco

sql git 开源

互联网高可用架构探讨 | 京东云技术团队

京东科技开发者

高可用 架构设计 硬件架构 网络架构 企业号 7 月 PK 榜

聊聊Excel解析:如何处理百万行EXCEL文件? | 京东云技术团队

京东科技开发者

POI 内存优化 企业号 7 月 PK 榜 excel解析

微服务架构概览图

wiflish

微服务 微服务架构 架构治理

避免“一选定终身”,那些从就读到就业的AI真相

脑极体

AI

视频会议进入云时代,为何企业需要华为云会议

轶天下事

云会议成为企业高频服务,华为云会议为何成为众多企业的选择?

轶天下事

微服务架构中的单一职责原则:构建高内聚、低耦合的服务

2756

微服务 微服务架构 单一职责

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