Google Home 讓 #1 當機的原因減少了 33%

Google Home 應用程式可協助設定、管理及控制 Google Home、Google Nest 和 Chromecast 裝置,以及數千種智慧聯網家庭產品,例如燈具、攝影機和溫度控制器。

Google Home 應用程式幕後的工程團隊受益於使用 Kotlin 和 Android Jetpack 程式庫,來提升工程工作效率和開發人員滿意度。

具體措施

Google Home 團隊決定在程式碼集中納入 Kotlin,提升程式設計的效率,並支援使用變數/值、智慧投放、協同程式等現代語言功能。截至 2020 年 6 月,約有 30% 的程式碼集是以 Kotlin 編寫,我們建議所有新功能都使用 Kotlin 開發。

該團隊還採用 Jetpack 程式庫,以提升開發人員的速度,減少對樣板程式碼維護的需求,並減少必要的程式碼量。Jetpack 程式庫也有助於讓程式碼更容易測試,因為功能界線和 API 更清楚明確。

成果

「提高效率並撰寫更少的程式碼,是用 Kotlin 實現『速度』的提升。」- Google Home 軟體工程師 Jared Burrows

與現有的 Java 程式碼相較,改用 Kotlin 後,要求的程式碼數量減少。其中一個範例是使用資料類別和 Parcelize 外掛程式:在 Java 中,以 Java 撰寫的 126 行手寫行現在只需 23 行,就能在 Kotlin 中表示,減少 80%。此外,系統還能自動產生相等和包裹方法,並保持在最新狀態。許多巢狀迴圈和篩選檢查也使用 Kotlin 提供的功能方法簡化。

由於 Kotlin 可將是否可為空值設為語言的一部分,因此避免陷入棘手情況,例如在 Java 中使用是否可為空值註解不一致時,可能會導致發生遺漏的錯誤。自從團隊開始改用 Kotlin 開發新功能後,NullPointerExceptions 的量減少了 33%。由於這是 Google Play 管理中心最常見的當機類型,因此減少這些類型可大幅改善使用者體驗。

隨著 Google Home 等大型成熟版應用程式 (內含超過一百萬行程式碼) 提供,您可以逐步新增 Jetpack 程式庫。透過整合這些方法可讓團隊整合及取代自訂的專屬解決方案,有時即使只有單一程式庫也一樣。由於 Jetpack 程式庫可協助工程師遵循最佳做法且較不詳細 (例如使用 RoomConstraintLayout),因此可讀性也有所提升。團隊考慮到許多較新的 Jetpack 程式庫「必備項目」,包括 ViewModelLiveData,而這兩者已廣泛用於 Google Home 程式碼集。

Google Home 應用程式團隊發現 Jetpack KTX 與 Kotlin 協同程式整合,因此特別實用。現在,該團隊可將協同程式與生命週期感知元件 (例如 ViewModel) 建立關聯,藉此避免複雜的非同步程式設計錯誤。

Java 是 Oracle 和/或其關係企業的註冊商標。

立即開始

進一步瞭解如何以 Kotlin 編寫 Android 應用程式使用 Android Jetpack 程式庫