Jetpack Compose 是用于构建原生 Android 界面的新工具包。它使用更少的代码、强大的工具和直观的 Kotlin API,可以帮助您简化并加快 Android 界面开发,打造生动而精彩的应用。它可让您更快速、更轻松地构建 Android 界面。在打造 Compose 的过程中,我们与各类合作伙伴通力合作,他们亲身体验了所有这些优势并与我们分享了一些感悟。

精简代码

编写更少的代码会影响到所有开发阶段:作为代码撰写者,需要测试和调试的代码会更少,出现 bug 的可能性也更小,您就可以专注于解决手头的问题;作为审核人员或维护人员,您需要阅读、理解、审核和维护的代码就更少。

与使用 Android View 系统(按钮、列表或动画)相比,Compose 可让您使用更少的代码实现更多的功能。无论您需要构建什么内容,现在需要编写的代码都更少了。以下是我们的一些合作伙伴的感想:

  • “对于相同的 Button 类,代码的体量要小 10 倍。”(Twitter)
  • “使用 RecyclerView 构建的任何屏幕(我们的大部分屏幕都使用它构建)的大小也显著减小。”(Monzo)
  • ““只需要很少几行代码就可以在应用中创建列表或动画,这一点令我们非常满意。对于每项功能,我们编写的代码行更少了,这让我们能够将更多精力放在为客户提供价值上。”(Cuvva)

编写代码只需要采用 Kotlin,而不必拆分成 Kotlin 和 XML 部分:“当所有代码都使用同一种语言编写并且通常位于同一文件中(而不是在 Kotlin 和 XML 语言之间来回切换)时,跟踪变得更容易”(Monzo)

无论您要构建什么,使用 Compose 编写的代码都很简洁且易于维护。“Compose 的布局系统在概念上更简单,因此可以更轻松地推断。查看复杂组件的代码也更轻松。”(Square)

直观易读

Compose 使用声明性 API,这意味着您只需描述界面,Compose 会负责完成其余工作。这类 API 十分直观 - 易于探索和使用:“我们的主题层更加直观,也更加清晰。我们能够在单个 Kotlin 文件中完成之前需要在多个 XML 文件中完成的任务,这些 XML 文件负责通过多个分层主题叠加层定义和分配属性。”(Twitter)

利用 Compose,您可以构建不与特定 activity 或 fragment 相关联的小型无状态组件。这让您可以轻松重用和测试这些组件:“我们给自己设定的目标是,交付一组新的无状态界面组件,确保它们易于使用和维护,且可直观实现/扩展/自定义。就这一点而言,Compose 确实为我们提供了一个可靠的答案。”(Twitter)

在 Compose 中,状态是显式的,并且会传递给相应的可组合项。这样一来,状态便具有单一可信来源,因而是封装和分离的。然后,应用状态变化时,界面会自动更新。“在对某些内容进行推断时,不必处理太多信息,并且无法控制或难以理解的行为也更少”(Cuvva)

加速开发

Compose 与您所有的现有代码兼容:您可以从 View 调用 Compose 代码,也可以从 Compose 调用 View。大多数常用库(如 Navigation、ViewModel 和 Kotlin 协程)都适用于 Compose,因此您可以随时随地开始采用。“我们集成 Compose 的初衷是实现互操作性,我们发现这件事情已经‘水到渠成’。我们不必考虑浅色模式和深色模式等问题,整个体验无比顺畅。”(Cuvva)

借助全面的 Android Studio 支持以及实时预览等功能,您可以更快地迭代和交付代码:“Android Studio 中的预览功能极大地节省了我们的时间。构建多个预览的能力也帮我们节省了时间。我们通常需要检查不同状态下或采用不同设置的界面组件(例如错误状态或采用不同的字体大小等)。由于能够创建多个预览,我们可以轻松执行这些检查。”(Square)

功能强大

利用 Compose,您可以凭借对 Android 平台 API 的直接访问和对于 Material Design、深色主题、动画等的内置支持,创建精美的应用:“Compose 不仅解决了声明性界面的问题,还改进了无障碍功能 API、布局等各种内容。将设想变为现实所需的步骤更少了”(Square)。

利用 Compose,您可以轻松快速地通过动画让应用变得生动有趣:“在 Compose 中添加动画效果非常简单,没有理由不去为颜色/大小/高度变化添加动画效果”(Monzo),“不需要任何特殊的工具就能制作动画,这与显示静态屏幕没有什么不同”(Square)。

无论您是使用 Material Design 还是自己的设计系统进行构建,Compose 都可以让您灵活地实现所需的设计:“从基础上将 Material Design 分离出来对我们来说非常有用,因为我们要构建自己的设计系统,这往往需要与 Material 不同的设计要求。”(Square)

如需详细了解 TwitterSquareMonzoCuvva 如何使用 Compose,请参阅深入案例研究。