产品新闻

庆祝 Jetpack Compose 发布 5 周年

阅读用时:4 分钟

今天,我们正式庆祝 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 TV、WearOS、Glance 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,例如 FlexBox、Grid、MediaQuery 和 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 的 Dispatch、AndroidWeekly 和 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 Chordiya、Huyen Tue Dao 和 Katie Barnett),他们为 Compose 的成功做出了贡献。但我们并不是要挑选个人,因为 Compose 代码库有太多出色的贡献者,而且你们中的许多人仍在通过有趣的示例、库和深入的讲座来激励我们。如果没有社区,Jetpack Compose 就不会像今天这样成功。

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

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

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

祝您在接下来的 5 年里创作愉快!

继续阅读