改完代码1秒生效,Compose热重载来了!

本文同步自微信公众号 "Android技术圈"

每次改一行代码,等 30 秒编译,再手动导航回刚才的页面。

这就是 Android 开发的日常。Flutter 开发者早就用上了亚秒级 Hot Reload,而我们还在盯着 Gradle 进度条发呆。

Compose HotSwan 来了,它要终结这一切。

先看效果:改代码,UI 秒变

改一个 Composable 的颜色、文字、布局,按下保存------不到 1 秒,运行中的 App 直接刷新。

不需要重新编译整个项目。不需要重启 App。不需要重新导航到当前页面。

甚至 remember{} 里的状态、滚动位置、导航栈,全部保留。

这不是 Android Studio 自带的 Live Edit。这是真正意义上的 Hot Reload。

Live Edit 哪里不行?

Android Studio 内置的 Live Edit 听起来很美好,但用过的人都知道它的局限:

  • 只支持非常简单的修改(改个字符串颜色还行)
  • 稍微复杂一点的改动就会触发全量重编译
  • 经常莫名其妙地不生效,需要手动触发
  • 状态丢失是家常便饭

Live Edit 本质上是一个"有限的代码替换",它没有解决根本问题:如何在不重建 APK 的前提下,把修改过的代码安全地注入到运行中的 App?

HotSwan 的思路完全不同。

五步流水线:从保存到生效

HotSwan 的核心是一条精心设计的五步流水线:

检测变更 → IDE 插件监听文件保存,识别哪些 .kt 文件被修改

增量编译 → 只编译发生变更的 Gradle 模块,而不是整个项目。首次编译 3-5 秒,后续命中缓存后降到 100ms-1s

提取差异 → 从编译产物中提取变更的 class,与已安装 APK 的字节码做对比,只保留真正有差异的部分

运行时替换 → 通过 Android Runtime (ART) 的 native agent,直接在内存中替换目标 class。已有的对象实例在下次方法调用时自动使用新代码

触发重组 → Compose 编译器插件精准定位受影响的 Composable 作用域,只重组必要的部分

整条流水线跑下来,差异提取 <100ms,运行时替换 <50ms,重组 <100ms。除去首次的编译预热,日常开发中的体感就是:保存即生效。

状态保留的三道防线

Hot Reload 最怕的就是丢状态。你好不容易填了一堆表单数据、导航到了三层深的页面,结果一刷新全没了。

HotSwan 设计了三级降级策略:

第一级:精准重组 ------默认行为。只影响修改过的 Composable 作用域,Slot Table 完整保留。remember{}、滚动位置、导航栈全部不受影响。

第二级:Composition 重置 ------当改动范围较大时触发。会销毁 Composition,但 rememberSaveable{} 和 ViewModel 仍然存活。

第三级:Activity 重启------最后的兜底方案。完整重建 Activity,相当于配置变更。

大多数日常修改都停留在第一级。你几乎感知不到状态有任何变化。

它能改什么?不能改什么?

支持的修改:

  • 修改 Composable 函数体(颜色、文字、布局、逻辑)
  • 新增 Composable 函数
  • 调整 Composable 调用顺序
  • 修改 XML 资源(strings、colors、dimensions)

不支持的修改:

  • 修改方法签名(参数类型、返回值)
  • 新增/删除字段
  • 结构性的类变更

遇到不支持的修改时,HotSwan 会自动检测并降级为全量编译,不会默默吞掉你的改动。

不只是 Hot Reload

HotSwan 还附带了几个很实用的功能:

可视化快照------每次 Hot Reload 自动截图,配合代码 diff 一起保存。你可以在时间线上回溯,看到每次修改对 UI 的影响。

代码时光旅行------看到某个历史快照觉得更好?直接回退到那个版本的代码。

Design Bridge------把快照导出为可分享的视觉报告,方便和设计师沟通"这个效果对不对"。支持像素级对比、滑块叠加等协作功能。

这些功能放在一起,HotSwan 不只是一个 Hot Reload 工具,更像是一个 Compose UI 开发的完整工作台。

价格和使用门槛

HotSwan 是一个 JetBrains 插件,通过 JetBrains Marketplace 安装。

  • 个人版 5 ,商业版 5,商业版 5,商业版15,有效期到 2027 年底
  • 要求 Android API 28+(因为依赖 ART 的 native agent 能力)
  • 支持 IntelliJ IDEA 和 Android Studio

考虑到这个工具每天能帮你节省的时间,这个价格基本等于白送。

对开发体验意味着什么

我一直觉得 Android 开发体验和 Flutter、SwiftUI 之间最大的差距不在语言,不在框架,而在反馈循环的速度。

写一行代码到看到效果,Flutter 只要几百毫秒,而 Android 动辄几十秒。这个差距日积月累,直接影响开发者的心流状态和生产力。

HotSwan 把这个反馈循环压缩到了亚秒级。这不是一个"锦上添花"的工具,而是一个改变开发方式的工具。

当你可以秒级看到 UI 变化时,你会更愿意尝试不同的方案,更大胆地调整布局和动画,更快地迭代设计。

写在最后

Compose HotSwan 做了 Android 社区等了很久的事情:让 Compose 开发拥有和 Flutter 一样快的反馈循环。

五步流水线、三级状态保留、亚秒级生效------这是一套经过深思熟虑的工程方案,而不是简单的代码注入 hack。

如果你每天都在写 Compose,强烈建议试一试。

你现在的 Compose 开发中,等编译最久的场景是什么?评论区聊聊!

相关推荐
三少爷的鞋7 小时前
AI 时代,我们都将成为通才型开发者:只懂 Android,已经不够了
android
Dovis(誓平步青云)10 小时前
家里设备越来越多,如何用一张空间地图控制灯光和温度![
android·java·前端·javascript·人工智能·电脑
晚风叙码12 小时前
MySQL 数据类型详解:从数值到字符串,一篇讲透
android·mysql·adb
传奇开心果编程12 小时前
【Compose Multiplatform 跨端开发学与练】第3课 布局与组件
android·windows·学习·ui·ios·kotlin·composer
传奇开心果编程15 小时前
【Compose Multiplatform 跨端开发学与练】第8课 资源管理与主题
android·windows·学习·ios·kotlin·web·composer
传奇开心果编程17 小时前
【Compose Multiplatform 跨端开发学与练】第9课 测试与调试
android·学习·macos·ios·kotlin·web·composer
传奇开心果编程17 小时前
【Compose Multiplatform 跨端开发学与练】第4课 导航与路由
android·windows·学习·ui·ios·kotlin·composer
传奇开心果编程17 小时前
【Compose Multiplatform 跨端开发学与练】第6课 状态管理与架构
android·学习·ui·ios·架构·kotlin·composer
事圆则缓17 小时前
Android AOSP 定制常见概念:源码目录、系统镜像与刷机流程
android
传奇开心果编程17 小时前
【Compose Multiplatform 跨端开发学与练】第2课 Compose 基础语法
android·windows·学习·ui·ios·kotlin·composer