Duolingo 和 Google Home 的 Kotlin 之旅 · 功能更強,代碼和錯誤更少!

2021-02-24 Enjoy出海開發者服務平臺

應用大受歡迎,團隊肯定備受鼓舞,於是決定把最棒的創意和功能添加進應用中,然後用戶們會更加滿意,如此循環……然而如此美妙的圖景在現實中會遇到 "現實的問題":代碼中的錯誤也隨之增加,進而造成應用的崩潰數量增加

讓我們看看 Duolingo 和 Google Home 是如何解決這些問題的。

Duolingo 是世界上最受歡迎的語言學習平臺之一,也是 Google Play 上下載量最高的免費教育應用之一 (已突破 2 億),為超過 3 億名學習者提供可免費使用的語言學習服務。

隨著應用自身的演進,Duolingo 的 Android 開發者發現代碼庫的代碼行數每年增長 46% 之多!為徹底解決這個問題,團隊最終一致決定從 Java 遷移至 Kotlin。

該團隊發揚了真正的 Duolingo 風格,通過開展每日排行榜競賽並鼓勵學習,讓遷移過程充滿遊戲樂趣 (沒錯,和他們在 Duolingo 應用中引入的遊戲化思想如出一轍)。該團隊中經驗豐富的 Kotlin 開發者擔任 "Kotlin 檢查員" 角色,並分享代碼審核方面的最佳做法,最終該團隊的所有 Android 開發者都成為了 Kotlin 專家。

兩年後,Duolingo 團隊完成了遷移工作,代碼的可維護性得到顯著提升。他們發現,將 Java 文件轉換為 Kotlin 文件後,代碼行數平均減少了 30%,某些情況下高達 90%

△ Duolingo 代碼量隨時間的變化,綠色為 Kotlin

團隊博客: 將 Duolingo 的 Android 100% 遷移至 Kotlinhttps://blog.duolingo.com/migrating-duolingos-android-app-to-100-kotlin/總體而言,在遷移到 Kotlin 後,我們非常滿意,也很高興看到 Kotlin 在我們公司和整個軟體行業中的使用率不斷增長!—— Art Chaidarun,資深高級軟體工程師

儘管有了新的產品功能,活躍貢獻者的數量增加了一倍以上,但他們的代碼庫規模幾乎與兩年前未遷移時一樣,這證明這一決策帶來了不錯的投資收益。此外,內部問卷調查顯示他們的 NPS 提升了 129 個點,開發者滿意度躍升,開發者認為是採用 Kotlin 起到了主要作用。現在,他們的 Android 應用完全使用 Kotlin 代碼庫,這讓他們可以更加放心、高效地開展工作。

Google Home 應用可幫助您設置、管理和控制您的 Google Home、Google Nest 和 Chromecast 設備以及數千種智能互聯家居產品 (如燈具、攝像頭、恆溫器等等)。其背後的工程團隊使用 Kotlin 和 Android Jetpack 庫來提升工程生產力和開發者滿意度,這讓他們受益良多。

https://play.google.com/store/apps/details?id=com.google.android.apps.chromecast.app&hl=en_US

團隊決定將 Kotlin 整合到代碼庫中,以提升編程效率,並使用現代語言功能 (如 var/val、智能投射、協程等)。截至 2020 年 6 月,30% 左右的代碼庫是使用 Kotlin 編寫的,且建議使用 Kotlin 來開發所有新功能。

該團隊還採用 Jetpack 庫來提高開發者的速度、降低對樣板代碼維護的需求並減少代碼量。Jetpack 庫還有助於提高代碼的可測試性,因為有更清晰的功能邊界和 API。

Kotlin 可助您提高工作效率,讓您編寫更少的代碼來實現更多的功能,這就是您可實現的 "速度" 提升。—— Jared Burrows,Google Home 的軟體工程師

與等效的現有 Java 代碼相比,改用 Kotlin 可以減少所需的代碼量。例如,使用數據類和 Parcelize 插件: 一個在使用 Java 時需要手動編寫 126 行代碼的類,現在使用 Kotlin 只需編寫 23 行,代碼量減少了 80%。此外,還可以自動生成並及時更新均衡和解析方法。使用 Kotlin 中提供的實用方法,還可以簡化許多嵌套循環和過濾檢查。

由於 Kotlin 可以將是否可為 null 作為語言的一部分,因此可以避免棘手的情況,例如在 Java 中不一致地使用是否可為 null 注釋可能會導致遺漏錯誤。實現 Kotlin 後,Google Home 應用團隊遇到的 NullPointerExceptions 減少了 33%。這是 Google Play 管理中心中最常見的崩潰類型,因此減少此類崩潰可以顯著提升用戶體驗。

對於 Google Home 這樣的大型成熟應用 (代碼超過數百萬行),能夠逐步添加 Jetpack 庫會很有幫助。納入這些庫後,該團隊可以整合併替換量身定製的解決方案,有時甚至只需要一個庫。Jetpack 庫可幫助工程師遵循最佳做法,並且編寫更簡潔的代碼 (例如,使用 Room 或 ConstraintLayout),因此可讀性也有所提高。該團隊將許多新的 Jetpack 庫視為 "必備庫",包括 ViewModel 和 LiveData,它們在 Google Home 代碼庫中得到廣泛使用。

https://developer.android.google.cn/training/constraint-layouthttps://developer.android.google.cn/topic/libraries/architecture/viewmodel

Google Home 應用團隊發現將 Jetpack KTX 與 Kotlin 協程集成特別有用。該團隊現在可以將協程與生命周期感知型組件 (如 ViewModel) 結合使用,從而避免複雜的異步編程錯誤。

正如 Google Home 團隊所說的,Kotlin 可以逐步添加進現有的項目,並帶來更簡潔的代碼和更少的錯誤。由於 Jetpack 中諸如 Paging 3 等開發庫已經優先使用 Kotlin 進行了重寫,再加上正在如火如荼開發的 Jetpack Compose,開發者們在為應用構建界面、實現功能的時候會愈發事半功倍。

https://developer.android.google.cn/topic/libraries/architecture/paging/v3-overviewhttps://developer.android.google.cn/jetpack/compose

我們最近剛剛發布了 Kotlin 1.4,其中引入的諸多全新語言特性改善了編寫 Kotlin 代碼的 "人機工程學",更通過對編譯器的改進提升了其整體質量和性能。

現在就是上手 Kotlin 的最佳時機,我們已經為您準備了全新的課程,助力您開啟 Kotlin 開發之旅。

相關焦點

  • ​功能更強,代碼和錯誤更少!Duolingo 和 Google Home 的 Kotlin 之旅
    ":代碼中的錯誤也隨之增加,進而造成應用的崩潰數量增加讓我們看看 Duolingo 和 Google Home 是如何解決這些問題的。△ Duolingo 代碼量隨時間的變化,綠色為 Kotlin團隊博客: 將 Duolingo 的 Android 100% 遷移至 Kotlinhttps://blog.duolingo.com/migrating-duolingos-android-app-to-100-kotlin/總體而言,在遷移到 Kotlin 後,我們非常滿意,也很高興看到 Kotlin 在我們公司和整個軟體行業中的使用率不斷增長
  • Kotlin 1.4 來了!全新語言特性和更多改進
    https://developer.android.google.cn/kotlinhttps://developer.android.google.cn/kotlin/first我們很高興與大家分享 Kotlin 1.4 版本,這將是 Kotlin 發展的下一個裡程碑,包含新的語言特性、改進的編譯器和工具。以下是此版本中部分振奮人心的新特性的簡要概述。
  • Kotlin開發Android初體驗,一樣的功能不一樣的代碼
    文件夾下了,地址:https://github.com/13531982270/BlogDemo創建項目:在創建項目中勾選kolin支持後直接下一步即可勾選kotlin支持創建完項目後我們發現主類已經是使用了kotlin代碼了,我們去project的build.gradle目錄下可以看到ext.kotlin_version = '1.1.51' kotlin
  • 2018 寫給開發者的 Kotlin 最完整的視頻教程和資源
    本Kotlin教程開始教你所有的關於kotlin的基礎知識。首先你先需要在你的機器上安裝Kotlin開發環境。本教程將教你所有的Kotlin函數和Kotlin面向對象編程(OOP)的概念,使你的app更強大。這裡你將了解到Kotlin的編程邏輯,條件和控制。你將學習所有有關儲存和使用哪種類型的儲存,以獲得更好的效果。
  • Kotlin 1.3.30 改進匯總
    此版本主要針對 Kotlin 1.3 修復 bug 並更新功能。Kotlin 1.3.30 改進了 Kotlin/Native 和 KAPT,支持更多對無符號類型和數組的操作,並改進了 IntelliJ IDEA 的調試功能,等等。
  • Kotlin和Java混合開發總結(基於Kotlin1.3.0版本)
    我本來是不想學習kotlin的,但是現在的形勢,很多公司都在使用kotlin開發,可以說學會kotlin也是無奈之舉,既然是潮流,谷歌也在大力推廣,所以還是只能硬著頭皮逼迫自己學一下,也能更快適應公司的需要。正所謂:「識時務者為俊傑」,改變不了公司的發展,那就改變自己。廢話少說,直接上正題。本文主要講解kotlin和java混合開發的一個初探。
  • Android 與 Google Play 2019 年終盤點: 開啟更精彩的下個十年
    /versionhttps://www.udacity.com/course/developing-android-apps-with-kotlin--ud940https://developers.google.cn/certification/associate-android-developercanary 版本的 Android Studio 4.0https://developer.android.google.cn
  • Kotlin 怎麼學 ?遇到過哪些坑?
    然後就可以像 java 一樣使用 kotlin,當然這不是我們的最終目的,因為 kotlin 的語法糖才是我們最後的目標。google 發布了 kotlin 簡易教程,大概只需要幾個小時,就可以看完:在實際的開發中,大概第一個星期內,你寫代碼的速度會下降一些,但是一個星期之後,完全上手了,寫代碼的速度是有很大的提升的。
  • Kotlin入門之旅
    最近剛好有機會有時間入門了一下kotlin,特來和大家分享一下經驗。一、環境搭建首先大家請自備開發工具和搭建好環境。我自己選擇的開發工具是idea,有多香不用我來多說,用過的都說好。環境搭建就無非jdk和kotlin的sdk,jdk自己下載安裝,sdk請到idea的插件中心自行安裝。
  • 那個即將取代Java的Kotlin,像不像鳩摩智?
    Kotlin語言的設計目標二、Kotlin的武功技能Kotlin的初衷是取代Java成為更安全更簡便的開發語言,但是隨著版本的更新,Kotlin的胃口和野心也越來越大,取代Java只是其技能中的一項,還打起了Javascript和C/C++的主意。
  • Kotlin Native 詳細體驗,你想要的都在這兒
    /gradlew dist 編譯時間不長,如果出現錯誤,可以 clean 多試幾次。。編譯完之後我們就可以得到編譯器一份啦。配置好之後,我們還要創建一個 gradle.properties 文件,加入下面的配置: # 配置編譯器 home,要配置為 bin 目錄的 parent # 例如:konan.home=<你的 kotlin-native 源碼路徑>/kotlin-native/dist konan.home=<你的編譯器路徑> 當然,這個配置可以不加
  • WorkManager 在 Kotlin 中的實踐
    /reference/kotlin/androidx/work/CoroutineWorkerTestListenableWorkerBuilderhttps://developer.android.google.cn/reference/androidx/work/testing/TestListenableWorkerBuilder本文的示例代碼是用 Kotlin 編寫的並使用了 KTX 庫 (
  • 新課程上線 | 學習使用 Kotlin 進行 Android 開發的最佳時機!
    數萬名學員一邊構建自己的應用,一邊學習著 Android 開發和編程概念。此後,Android 平臺發生重大變化,我們不僅發布了四個重要的 Android 版本,新增了對 Kotlin 程式語言的支持,還推出了 Jetpack,這一整套庫可幫助開發者用更少的代碼更輕鬆地編寫優質應用。有了這些最新更新,是時候為初學者發布下一代培訓內容了。
  • kotlin如何解決java開發痛點,讓程式設計師happier
    正如官網的slogan所描述:kotlin,是一門讓程式設計師寫代碼時更有 幸福感 的 現代 語言。JetBrains這家公司,從kotlin的迭代和發版節奏,可以看出來,他們迭代kotlin就像我們程式設計師迭代我們公司的app一樣,很重視用戶體驗,很重視程式設計師的開發體驗,java哪個語法寫起來很痛苦,他們就改善那個語法。java程式設計師缺什麼,他們就給kotlin造什麼。
  • Java vs Kotlin,Android開發人員應該選擇哪種語言?
    Kotlin更加高效,代碼更簡潔,並且也是Android開發的官方語言"而且這個人建議學習Java。並不是唱衰Kotlin"那麼,作為一名Android開發,我的觀點可能有點偏見,。此外,還有很多關於android開發的教程,書籍和課程,包括免費和付費的,這些教程可以讓你先用java語言開始入門Android開發之路,但對於Kotlin來說這塊資料並不多,特別是在Android上的免費資源,在國外很多關於kotlin的進階教程大都收費的。
  • Android:Kotlin詳細入門學習指南-基礎語法(一)
    ~ Kotlin是什麼 ~Kotlin是Android開發的一級程式語言(Google官方認證)由JetBrains公司在2010年推出 & 開源,與Java語言互通 & 具備多種Java尚不支持的新特性Android Studio3.0後的版本支持Kotlin~ 優點 ~碼更少、可讀性更強 - 花更少的時間來編寫代碼與理解他人的代碼成熟的語言與環境
  • Android 和 Google Play 的最新更新 | Google I/O 精彩回顧
    Android 12 帶來了 Android 歷史上最大的設計變更,也讓整個系統更具表現力,甚至連繫統配色也真正做到了個性化。我們正在將軟體和硬體的生態系統統一在同一種設計語言下,名叫 Material You。Android 12 中的應用 widget 經過設計改版,更加實用、美觀,也更容易被用戶發現。
  • 不完全依賴異常的Kotlin錯誤處理
    另一方面,Kotlin沒有檢查異常機制,因此由於檢查異常而導致的錯誤處理無法實施。因此,將使用受檢查的異常的Java代碼移植到Kotlin時,錯誤處理由編碼規則處理,而不是依賴編譯器。我實際上使用異常對Kotlin進行了代碼審查,但我意識到代碼審查負擔增加了。