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 可以提高效率,编写更少的代码来完成更多的事情,这就是速度的提升。” - Google Home 软件工程师 Jared Burrows

与等效的现有 Java 代码相比,切换到 Kotlin 导致所需代码量减少。一个例子是使用数据类和 Parcelize 插件:**一个在 Java 中需要 126 行手动编写的类现在可以用 Kotlin 只需 23 行来表示——减少了 80%。**此外,相等性和序列化方法可以自动生成并保持最新。许多嵌套循环和过滤检查也使用 Kotlin 中可用的函数式方法进行了简化。

因为 Kotlin 可以使可空性成为语言的一部分,所以可以避免棘手的情况,例如当 Java 中可空性注释的使用不一致可能导致遗漏错误时。**自从团队开始迁移到使用 Kotlin 开发新功能以来,他们发现 NullPointerException 的数量减少了 33%。**由于这是Google Play Console 上最常见的崩溃类型,减少它们导致用户体验大幅提升。

对于像 Google Home 这样拥有超过百万行代码的大型成熟应用,能够逐步添加 Jetpack 库非常有用。集成它们使团队能够整合和替换定制解决方案,有时甚至只需要一个库即可。由于 Jetpack 库可以帮助工程师遵循最佳实践并减少冗余(例如,使用RoomConstraintLayout),因此可读性也得到了提高。团队认为许多较新的 Jetpack 库是“必备的”,包括ViewModelLiveData,这两者都在 Google Home 代码库中广泛使用。

Google Home 应用团队发现 Jetpack KTX 与 Kotlin 协程的集成特别有用。团队现在能够通过将协程与生命周期感知组件(如ViewModel)关联来避免棘手的异步编程错误。

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

开始使用

了解更多关于使用 Kotlin 编写 Android 应用使用 Android Jetpack 库 的信息。