Google Home 应用团队将因首要原因导致的崩溃次数减少了 33%

Google Home 应用可帮助您设置、管理和控制 Google Home、Google Nest 和 Chromecast 设备,以及数千种智能互联家居产品(如灯具、摄像头、恒温器等)。

Google Home 应用背后的工程团队使用 Kotlin 和 Android Jetpack 库来提升工程生产力和开发者满意度,这让他们受益良多。

他们做了什么

Google Home 团队决定将 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 开发新功能后,NullPointerException 减少了 33%。这是 Google Play 管理中心中最常见的崩溃类型,因此减少此类崩溃可以显著提升用户体验。

对于 Google Home 之类的大型成熟应用(代码超过数百万行),能够逐步添加 Jetpack 库会很有帮助。纳入这些库后,该团队可以整合并替换量身定制的解决方案,有时甚至只需要一个库。Jetpack 库可帮助工程师遵循最佳做法,并且编写更简洁的代码(例如,使用 RoomConstraintLayout),因此可读性也有所提高。该团队将许多新的 Jetpack 库视为“必备库”,包括 ViewModelLiveData,它们在 Google Home 代码库中得到广泛使用。

Google Home 应用团队发现将 Jetpack KTX 与 Kotlin 协程集成特别有用。该团队现在可以将协程与生命周期感知型组件(如 ViewModel)结合使用,从而避免复杂的异步编程错误。

Java 是 Oracle 和/或其关联公司的注册商标。

开始使用

详细了解如何使用 Kotlin 开发 Android 应用以及如何使用 Android Jetpack 库