硬核干货——《中小企业 AI 实战指南》免费下载! 了解详情
写点什么

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

评论

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

2025 年以太坊和 Polkadot 生态中有哪些关键进展值得关注?

TechubNews

区块链 以太坊 web3 #Web3 加密市场

快速上手 INFINI Console 的 TopN 指标功能

极限实验室

INFINI Console TopN

【YashanDB知识库】并发update报错YAS-02208 lock conflict in consistent write

YashanDB

数据库 yashandb

时序数据库TDengine 2024 年末奖项大盘点,七大奖杯实力出圈!

TDengine

tdengine 时序数据库 数据库·

Python库房管理系统开发指南

不在线第一只蜗牛

Python

比克动力李凤梅:中国在供应链端优势明显

科技热闻

Nginx 可观测性最佳实践

观测云

nginx

前沿洞察:低代码赋能企业数字化转型,解锁打造敏捷组织的底层逻辑

不在线第一只蜗牛

低代码

懒猫微服移植 drawDB 应用

玄兴梦影

NAS 移植应用 懒猫微服应用移植 drawDB 懒猫微服

NFTScan | 01.06~01.12 NFT 市场热点汇总

NFT Research

NFT NFT\ NFTScan #Web3

My Metronome for Mac(音乐节拍器软件)v1.4.1激活版

小玖_苹果Mac软件

为什么说预测市场AI Agent项目 Aegis ,将会超越 axibt 的高度?

股市老人

【连载 11】Phaser 类

FunTester

《CPython Internals》阅读笔记:p118-p150

codists

CPython Internals

Jenkins质量门禁设计方案的深入探讨

测试人

软件测试

如何玩转TikTok直播?掌握这些关键要点

Ogcloud

TikTok 直播专线 tiktok直播 tiktok直播专线 tiktok直播网络

Univer Go 推出 AI 辅助编写 Univer API 功能

梦数技术团队

JavaScript 开源 Excel 表格 spreadsheet

一文详解 Astherus “Stage 1: Spectra”,开启 DeFi 收益之门

股市老人

【YashanDB知识库】导入数据时报错:YAS-00008 type convert error:literal does not match format string

YashanDB

数据库 yashandb

数据服务 | 某造纸企业管理会计PDCA体系的敏捷经营和精准决策

用友智能财务

运维‘ 经营分析 会计

什么样的海外直播网络能满足做海外直播要求?

Ogcloud

海外直播专线 海外直播 直播专线 tiktok直播专线 海外直播网络

Kokoro,一个 82M 参数的超强 TTS 模型;美团、字节领投 3D 生成大模型影眸科技丨 RTE 开发者日报

声网

【YashanDB知识库】YMP校验从yashandb同步到oracle的数据时,字段timestamp(0)出现不一致

YashanDB

数据库 yashandb

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