产品资讯

庆祝 Jetpack Compose 发布 5 周年

阅读用时:5 分钟

今天,我们正式庆祝 Jetpack Compose 1.0 发布五周年。从 2021 年 7 月 28 日发布的 1.0 版到最新的 1.11 版,我们看到这些 API 在过去几年中取得了显著的进步,因此我们想借此机会庆祝一下。

当我们正式发布 1.0 版本时,曾承诺提供一种更简单、更快速、更直观的方式来在 Android 上构建原生界面。回首过往,我们可以放心地说,Compose 不仅兑现了这一承诺,还彻底改变了 Android 生态系统,如今排名前 1,000 的应用中有超过 68% 在生产环境中使用 Compose。

历史记录

在过去五年中,Compose 的使用量稳步增长。在早期,我们探讨了如何使用基本的 Box、Row 和 Column 构建布局。如今,我们已扩展 Compose 的适用范围,使其不仅适用于移动设备,还适用于其他设备规格,例如 Compose for TVWearOSGlance for Widgets,甚至还适用于配备 Jetpack Compose Glimmer 的带屏眼镜。

jetpack_compose_everywhere.png

我们与 Jetpack 工程主管 Clara Bayarri、该团队的两名前主管 Romain Guy 和 Chet Haase,以及高级工程总监 Tor Norbye 共同录制了一期 Android Developers Backstage 节目。在本期节目中,他们讨论了 Compose 的历史和早期的开发工作。

timeline.png
历年来的 Compose 亮点

回顾

Compose 的最初版本与您今天所了解的版本截然不同。Android 团队内部同时开展了两个项目。

当时,Views 工具包团队正考虑将界面工具包解绑为库,以提高开发速度,并让开发者更轻松地采用和控制更新。与此同时,一个团队正在研究一种新颖的想法,即通过在 Kotlin 中嵌入 XML 来构建声明式布局,如下所示:

jetpack_compose_early_code.png

这两项工作合并后,便产生了您今天所看到的成果 - 一款完全声明式的界面工具包,可充分利用编译器插件、运行时和 Kotlin 的强大功能:

@Composable
fun Newsfeed(stories: List<Story>) {
    LazyColumn {
        items(stories) { story ->
            Card {
                val author = story.author
                Image(painterResource(author.profilePhoto),
                    contentDescription = author.name)
                Text(author.name)
                Text(story.content)
                if (story.hasCommentsEnabled()) {
                    for(comment in story.comments) {
                        Text(comment.mainContent)
                    }
                }
            }
        }
    }
}

而社区的各位在很早的时候就为我们提供了帮助!在 2021 年之前,Compose 经历了一个预 Alpha 阶段,这有助于确保 Compose 能够解决开发者的难题。

我们最喜欢的回忆之一是 Android 开发者挑战赛。我们向社区发起挑战,要求使用 Compose 构建四项不同的任务,结果我们的 Feed 中充斥着小狗应用、时钟和天气应用,并且我们收到了大量直接反馈,这些反馈帮助我们打造了 1.0 版。

Compose 不断发展,从最初发布时的一组 Material 2 组件,到现在支持 Material 3 Expressive

material2.png
Compose 中的 Material 2

展望未来

截至目前,Compose 1.11 是最新版本,1.12 即将推出,与 5 年前的 1.0 相比,它提供了更多功能。今年,我们推出了更多自适应 API,例如 FlexBoxGridMediaQuery 和 Styles。借助这些 API,您可以利用 Compose 将高级自适应界面开发提升到新的水平。

在 2026 年 Google I/O 大会上,我们宣布现在将全面转向 Compose,这意味着未来所有界面开发都将仅在 Compose 中进行,而 Views 工具包将进入维护模式。Material Design 也正将重心完全转移到 Compose,这标志着 findViewById era 的时代即将结束。 

社区是 Compose 的核心

多年来,您通过各种富有创意的示例向我们展示了如何使用 Compose,这让我们深受启发。我们很乐意再分享一些令人兴奋的示例。Jetbrains 一直是 Google 的重要合作伙伴,通过 Compose Multiplatform 将 Compose 扩展到各个平台,让桌面、iOS 和 Web 开发者也能享受到 Compose 的优势。  

我们非常喜欢订阅最受欢迎的简报,例如 JetpackCompose.app 的 DispatchAndroidWeekly 和 jetc,这些简报可帮助 Android 开发者及时了解 Compose 和 Android 领域的最新动态。

另一位杰出贡献者是 sinasamaki。他们使用 Compose 打造了许多令人愉悦的体验,例如这个有趣的 Ribbon 修饰符和故障效果:

ribbon_modifier_sinasamaki.gif

Saket Narayan 一直以来都是我们在为 Compose 创建实用工具方面的灵感来源,例如 telephoto(一个支持平移和缩放手势以及大图像自动二次采样的库)或最新的库 Touch Robot,可让您轻松测试互动动画:

paparazzi.gif(end = 3_000) {
  DebitCard(
    Modifier.testTag("card")
  )

  val touchRobot = rememberTouchRobot()
  LaunchedEffect(Unit) {
    touchRobot.onNode(hasTestTag("card")).performGesture {
      draw(
        path = createAndroidHeadPath(),
        duration = 3.seconds,
      )
    }
  }
}

/** A path drawing the Android head. */
fun createAndroidHeadPath(bounds: Rect): Path = TODO()
saket_touch_robot.gif

Jake Wharton 以创新方式使用 Compose(例如 molecule,甚至使用 Compose 为终端构建界面 mosaic)。Chris Banes 多年来构建了许多 Compose 库,我们最近最喜欢的是用于模糊背景的 Haze,还有许多 Android Google 开发者专家(例如 Akshay ChordiyaHuyen Tue DaoKatie Barnett),他们为 Compose 的成功做出了贡献。但我们并不是要挑选个人,因为有太多优秀的贡献者为 Compose 代码库做出了贡献,而且你们中的许多人仍在通过有趣的示例、库和深入的讲座来激励我们。如果没有社区,Jetpack Compose 就不会像今天这样成功。

祝愿未来 5 年及更长时间一切顺利!

Jetpack Compose 已从一个实验性想法发展成为 Android 界面开发的标准。感谢 Google 的整个工具包团队,以及编写库、提交 bug 并不断突破声明式界面功能界限的出色全球开发者社区。

本周,我们将在全球各地举办一些线下生日派对,并于 7 月 30 日 13:00(世界协调时间)在 Android Developers YouTube 频道上直播“生日派对”。在此期间,我们将一起讨论 Compose 并回答您的问题!

祝您在接下来的 5 年里创作出更多精彩内容!

继续阅读