Compose 四月稳定版来袭,测试、触控、预览工具全线革新

本文首发于公众号"Android技术圈"

前言

Google 在 Jetpack Compose April 2026 里把 Compose 1.11.0 标成稳定,BOM 落到 2026.04.01。

这一版里,真正会立刻动到你工程的有三条线:Compose UI 测试默认走 v2 调度 、触控板事件按鼠标而不是假触摸 、以及 Shared Element / Preview / runtime 主机默认值 这一圈工具链补齐。其余大量新能力还在 @Experimental 里,适合提前试,不适合默认进业务主干。

官方说明见:What's new in the Jetpack Compose April '26 release。

升级BOM

Gradle 里把 BOM 指到官方给的坐标即可,其它 Compose artifact 版本交给 BOM 对齐。

bash 复制代码
dependencies {
    implementation(platform("androidx.compose:compose-bom:2026.04.01"))
}

如果你不用 BOM,记得 Foundation / UI 等同升,否则容易出现组件版本错配(这类问题排查起来很费时间)。

Compose UI 测试

Compose 1.10 里已经预告过,这次 v2 testing API 直接默认启用,v1 标记弃用。

差异核心是 TestDispatcher :v1 用 UnconfinedTestDispatcher,协程 launch 后几乎立刻跑完;v2 换成 StandardTestDispatcher,任务先进队列,只有你推进虚拟时钟(例如 advanceUntilIdle)才会执行。

对工程的意义很直接:

  • • 更接近生产里的调度顺序,更容易把"靠运气通过"的竞态测挂,长期看 CI 更干净。

  • • 反过来,以前依赖"立刻执行完"的测试要改,否则升级当天就会红一片。

官方迁移文档:Testing v2 migration guide。

LookaheadAnimationVisualDebugging

做 SharedTransitionLayout / Modifier.animatedBounds 时,匹配不到、轨迹怪、边界跳 这类问题以前主要靠猜。

现在可以用 LookaheadAnimationVisualDebugging 包一层,直接叠一层调试信息:目标 bounds、动画轨迹、匹配数量 都能看见。

bash 复制代码
LookaheadAnimationVisualDebugging(
    overlayColor = Color(0x4AE91E63),
    isEnabled = true,
    multipleMatchesColor = Color.Green,
    isShowKeylabelEnabled = false,
    unmatchedElementColor = Color.Red,
) {
    SharedTransitionLayout {
        CompositionLocalProvider(LocalSharedTransitionScope provides this) {
            // 你的内容
        }
    }
}

这类工具的价值在于:把运行时布局决策可视化,减少"动画代码写得对,但匹配条件错了"的无效排查。

基础事件归PointerType.Mouse

笔记本触控板、平板外接触控板,以前不少事件被当成 PointerType.Touch 的假手指 ,结果是 按下拖动像在滚屏,选不中。

1.11 把基础触控板事件 对齐到 PointerType.Mouse ,和鼠标行为一致。平台从 API 34 起识别的 双指滑动、捏合 等分类,也会更自然地被 Modifier.scrollable、Modifier.transformable 吃到。

内置文本里还有一串桌面向行为:双击/三击选区、更像桌面的文本上下文菜单、拖放起始手势 等,对折叠屏 + 键盘盖、Chromebook 类场景更友好。

测试侧新增了 performTrackpadInput ,专门用来验触控板路径。若你写了自定义手势,记得 触摸 / 鼠标 / 触控板 / 笔 四条线都过一遍。

Runtime:HostDefaultProvider

Compose runtime 里新增了 HostDefaultProvider、LocalHostDefaultProvider、HostDefaultKey、ViewTreeHostDefaultKey 这一套。

意图很简单:库作者要在 composition 上挂主机级服务时,不必为了查默认值去依赖 compose-ui ,对 Kotlin Multiplatform 更友好。库侧可以用 compositionLocalWithHostDefaultOf 建 CompositionLocal,默认值从 host 解析。

这条对写跨端 Compose 库的读者更关键;业务 App 多数先感知为"依赖图更干净、官方在铺 kmp 地基"。

PreviewWrapper 统一主题和预览

Studio 的 Custom Previews 允许你定义预览里 怎么包一层再渲染。

做法是实现 PreviewWrapperProvider,再用 @PreviewWrapper 标在带 @Preview / @MultiPreview 的 @Composable 上,把 Theme、Locale、假数据注入这类重复代码收敛掉。

bash 复制代码
class ThemeWrapper : PreviewWrapper {
    @Composable
    override fun Wrap(content: @Composable () -> Unit) {
        JetsnackTheme {
            content()
        }
    }
}

@PreviewWrapperProvider(ThemeWrapper::class)
@Preview
@Composable
private fun ButtonPreview() {
    Button(onClick = {}) {
        Text(text = "Demo")
    }
}

两个API被废弃

  • • Modifier.onFirstVisible() 弃用 :名字在 Lazy 场景里容易误解(滚动中会多次触发)。官方建议迁到 Modifier.onVisibilityChanged(),自己按阈值做可见性状态。

  • • ComposeFoundationFlags.isTextFieldDpadNavigationEnabled 删除 :D-pad 在 TextField 里默认开启,游戏手柄 / 电视遥控器方向键先移动光标,到行尾才交焦点给下一个控件。

1.12 预告:compileSdk 37 + AGP 9

官方提前打了招呼:Compose 1.12.0 会把 compileSdk 抬到 37,依赖 Compose 的 App 和库会跟着继承这条要求。

这和 AGP 大版本、compileSdk 支持矩阵有关,升级前把 AGP API level support 打开对照一下,避免"只升 Compose 不升 AGP"卡死在编译期。

最后

如果你已经在 Compose 主分支上,这次升级的第一刀往往是测试:先把 v2 调度迁移跑通,再验收触控板相关交互,最后按需开实验 API。

写业务的同学优先跟 BOM + 测试 + 触控板 ;写库和 Design System 的同学多看 HostDefault + Styles + PreviewWrapper。

#JetpackCompose #Android开发 #Kotlin #Compose测试 #跨端UI

相关推荐
冉冉同学3 小时前
AI Agent 开始操作真实手机:移动端自动化的 3 个新考点
android·ai编程
帅得不敢出门3 小时前
Android Framework关闭软件低电关机功能测试PMIC低电保护
android
恋猫de小郭4 小时前
Flutter + EmbeddingGemma 2,谷歌发布完全端侧的 AI Edge Foresight
android·前端·flutter
墨天梦5 小时前
B16_Material主题与可访问交互
android·kotlin·交互
弯_弯6 小时前
企业知识库 RAG 落地:从 Demo 到生产,四条工程链路与参数级自查
android·java·javascript
晚风叙码7 小时前
MySQL 表的约束详解:从空属性到外键
android·数据库·mysql·adb
alexhilton17 小时前
模块化Jetpack Compose架构
android·kotlin·android jetpack
厮年断弦19 小时前
AI 辅助开发实录:一周做完一个 Android 本地音乐播放器,这些坑替你踩了
android
hai_android20 小时前
InputStage 责任链核心执行流程
android·android studio·android jetpack
mmsx1 天前
Android 测绘计算工程化:七四参数、高程拟合与单位系统
android·kotlin