写点什么

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

评论

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

人类 vs AI:玩梗大作战,看看谁是最后的赢家?

LigaAI

测评 ChatGPT 文心一言 GPT-4 企业号 4 月 PK 榜

叹服!华为高工手写344页高性能Java架构核心原理实战大神手册

Java 架构 高并发

大流量时代,如何规划系统流量提升可靠性

华为云开发者联盟

后端 开发 华为云 华为云开发者联盟 企业号 4 月 PK 榜

华秋干货铺 | PCB阻抗计算的可制造性设计

华秋电子

汽车电阻:新能源时代来临,车用电阻市场机遇正在显现

华秋电子

赋能产业新发展,华秋电子携多高层板积极参与成都工博会

华秋电子

AI新时代拐点:人工智能当红炸子鸡Chatgpt

AI探险家小新

人工智能 程序员 创作 工作 ChatGPT

牛皮!GitHub上标星90.6K的Java面试指南+笔记

Java你猿哥

Java 程序员 面试 ssm java核心知识点

我用Bitmap实现亿级数据统计

Java你猿哥

Java redis 架构 ssm BitMap

boot-admin整合Quartz实现动态管理定时任务

Java你猿哥

Java 架构 ssm vue admin springboot整合quartz

OpenHarmony驱动子系统开发—GPIO

鸿蒙之旅

OpenHarmony 三周年连更

看完这篇推特视频怎么下载到手机相册的教程,我又可以了!

frank

twitter

Java面试很难?啃完阿里老哥这套Java架构速成笔记,我都能拿30K

Java你猿哥

Java 架构 面试 分布式 java基础

你真的理解 Golang 切片吗?全切片表达式及切片使用技巧

宇宙之一粟

Go 切片 三周年连更

IM开发干货分享:IM客户端不同版本兼容运行的技术思路和实践总结

JackJiang

网络编程 即时通讯 即时通讯IM

Alibaba内部首发“M8级”500页微服务架构手册,GitHub上杀疯了

Java你猿哥

Java 架构 微服务 ssm 架构师

Marior去除边距和迭代内容矫正用于自然文档矫正

合合技术团队

人工智能 OCR 识别

视频剪辑工具:Final Cut Pro 中文版

真大的脸盆

Mac 视频剪辑 Mac 软件 视频处理工具

太阳能是否能助力LED显示屏节能?

Dylan

节能 LED显示屏 太阳能

Spring Boot扩展:深入分析 IoC 容器

Java你猿哥

Java spring ssm 架构师 spring ioc

聊聊智能语音交互系统

轻口味

AI 三周年连更

IntelliJ IDEA太重量级了?不妨尝试一下新的IDE工具

Java你猿哥

Java emacs ssm IDEA IntelliJ IDEA

AI前沿速报0428:95%开发人员在用AI编程

AI探险家小新

人工智能 编程 程序员 新闻资讯 ChatGPT

【4.21-4.28】写作社区优秀技术博文一览

InfoQ写作社区官方

热门活动 优质创作周报

大白话讲解synchronized锁升级套路

阿里大佬纯手写Angular和Spring Boot全栈技能修炼手册

Java Spring Boot angular 全栈

招商证券与易观千帆达成合作,持续深耕数字化金融

易观分析

金融 证券

使用 Vue.js 和 JavaScript 在 Web 应用程序中下载 PDF 文件

海拥(haiyong.site)

三周年连更

vivo 推送系统的容灾建设与实践

vivo互联网技术

容灾 推送系统

说一个大家都知道的 Spring Boot 小细节!

江南一点雨

Java springboot

软硬件负载均衡 IP 地址透传

TiDB 社区干货传送门

数据库架构设计 数据库连接

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