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%。此外,等式和 Parcelize 方法可以自动生成并保持最新。许多嵌套循环和过滤检查也通过 Kotlin 中可用的函数式方法得到了简化。

由于 Kotlin 可以将可空性作为语言的一部分,因此可以避免一些棘手的情况,例如 Java 中可空性注解的不一致使用可能导致遗漏的 bug。自团队开始迁移到使用 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 库