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 博客上的報道。

關注我並轉發此篇文章,私信我“領取資料”,即可免費獲得InfoQ價值4999元迷你書!


分享到:


相關文章: