改完代码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 安装。

  • 个人版 <math xmlns="http://www.w3.org/1998/Math/MathML"> 5 ,商业版 5,商业版 </math>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 开发中,等编译最久的场景是什么?评论区聊聊!

相关推荐
黄林晴2 小时前
紧急适配!Android 联系人权限重构,READ_CONTACTS 全面废弃
android
黄林晴2 小时前
Android 要变天:桌面端这次真的来了!
android
黄林晴2 小时前
Google 藏大招!AndroidX 悄悄上线 Remote Compose:服务端直接下发原生 UI,再也不用发版了
android
黄林晴2 小时前
Google 终于动手了!Android 联系人权限被彻底重构,一文讲透新方案
android
Kapaseker2 小时前
Compose 官方 API 搞定文本输入格式
android·kotlin
studyForMokey2 小时前
【Android面试】ViewModel & LiveData & EventBus专题
android·java·面试
深念Y3 小时前
乐播投屏电视广告逆向分析实录:从Activity追踪到放弃
android
约翰先森不喝酒3 小时前
Android 开发 自定义身份证键盘
android·计算机外设