数据保护背景下,安全团队引入了哪些新技术进行防控升级?点击学习案例 了解详情
写点什么

Duolingo 如何将 Android App 全部迁至 Kotlin

  • 2020 年 4 月 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 年 4 月 24 日 09:001322

评论

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

互斥锁、自旋锁、读写锁...理清它们的区别和应用

云原生开发者社区

云计算 编程 开发 应用

打造“大国重器”高性能计算,联想与英特尔如何携手点亮数字经济加速度?

脑极体

北鲲云超算平台如何将云计算与高性能计算结合

北鲲云

提高工作效率的三种方法

石云升

团队管理 管理 引航计划 内容合集 9月日更

如何让文件共享 SDK 支持使用 Uri 上传文件

ZEGO即构

文件存储 分区存储 文件共享

5G三年成厦,泛在千兆为应用造榫卯

脑极体

Docker OOM Killer

小翁牌坦克

Docker JVM trouble shooting

手把手教你使用Studio Lite + Digtal car!助力智能汽车场景、轻应用开发更轻松!

SOA开发者

【新品尝鲜】OCR磅单识别上线邀测,为货运物流提速增效

百度大脑

人工智能 OCR

FunTester框架Redis性能测试之map & INCR

FunTester

redis 性能测试 测试框架 测试开发 FunTester

CTF压轴题解题思路和过程

网络安全学海

网络安全 信息安全 渗透测试 WEB安全 安全漏洞

强烈推荐!88页《Redis学习文档》完整版,PDF开放下载

Java 架构 面试 程序人生 编程语言

[27]智慧金融--AI目前最被看好的落地领域

数据与智能

人工智能

AlibabaP9力荐!最新出品1297页JDK源码+并发核心原理解析小册

Java 架构 面试 程序人生 编程语言

一文了解「模块化」 区块链的当前形势:执行、安全性及数据可用性

CECBC

linux线上CPU100%排查

入门小站

Linux

JVM g1 gc 学习笔记二

六维

GC 9月日更

音视频终端引擎优化实践

百度开发者中心

最佳实践 音视频 实践案例 智能视频 行业深度

行云创新:云原生技术助力企业数字化转型

云原生开发者社区

技术 云原生 转型 数字化 平台

通俗易懂!306页图解计算机网络,涵盖所有基础知识

Java 架构 面试 程序人生 编程语言

002云原生之架构定义

穿过生命散发芬芳

云原生 9月日更

翻译积累 - Java正则表达式Pattern类

小马哥

翻译 日更

智能网联汽车行业信息安全现状与威胁

SOA开发者

金九银十不要怕!有了腾讯这本2021年最新Java面试手册,offer手到擒来!

Java 程序员 架构 面试 后端

华为大牛总结的超全Linux学习笔记,看这一篇就够了!

Java 架构 面试 程序人生 编程语言

超十年渗透专家总结出636页渗透测试全笔记,100课时一次讲清

Java 架构 面试 程序人生 编程语言

在线GIF图片帧修改工具

入门小站

工具

【实战】基于TensorRT 加速YOLO系列以及其他加速算法实战与对比

cv君

AI 引航计划

手把手教学基于深度学习的遥感影像倾斜框算法训练与分析

cv君

AI 引航计划

重磅来袭,虚拟化技术分类

hanaper

4k/8k超高清时代,如何利用媒体处理技术加速数字化升级

4k/8k超高清时代,如何利用媒体处理技术加速数字化升级

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