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 库可以帮助工程师遵循最佳实践并减少冗余(例如,使用 Room 或 ConstraintLayout),代码的可读性也得到了提高。该团队认为许多较新的 Jetpack 库是“必备”的,包括 ViewModel 和 LiveData,这两者都在 Google Home 代码库中得到了广泛使用。
Google Home 应用团队发现 Jetpack KTX 与 Kotlin 协程的集成特别有用。通过将协程与 ViewModel 等生命周期感知的组件相关联,该团队现在能够避免棘手的异步编程错误。
Java 是 Oracle 和/或其关联公司的注册商标。
开始使用
详细了解 如何使用 Kotlin 编写 Android 应用 和 如何使用 Android Jetpack 库。