改完代码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 开发中,等编译最久的场景是什么?评论区聊聊!

相关推荐
海水冷却17 小时前
Android 群组聊天怎么实现:基于 ZIM 的完整落地指南(附可运行 Demo)
android
三少爷的鞋19 小时前
现代 Android 架构指南:不要再主动设计 Callback 接口
android
TimeFine1 天前
AI 编码工作流的设计
android·ai编程
骑着蜗牛撵大象3271 天前
C++20 协程 × 屏障:手写一个 co_await 版 Barrier,让等待不再钉死线程
android·c++20·协程·并发编程·co_await·屏障同步
山东孙燕姿1 天前
设备台账重构:从一张表到三层模型
android·java·网络·低代码·重构·rxjava
蒸鱼Yuzheng1 天前
移动端 CPU 调度分析:线程亲和性、大小核迁移与卡顿
android·perfetto·性能分析·线程优化·cpu调度
booboosui1 天前
安卓唤醒词:12 维 MFCC 加 DTW,阈值 1.8
android
传奇开心果1 天前
Compose Multiplatform 共享边界实战:架构契约、互操作同步与可回退设计
android·kotlin
事圆则缓1 天前
从开机到首帧:Android 系统与应用启动流程源码分析
android
AI吃大瓜1 天前
指针压力表读数4:Android实现指针压力表读数(可实时检测)
android·指针读数·指针压力表·压力表·压力表读数