Categories
程式開發

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