2026 年了,Android 的 Jetpack Compose 终于支持了 Hot Reload ,但是它不是 Google 或者 JetBrains 出品,而是个人开发者 Jaewoong Eum(skydoves)实现的一个 IDEA 插件: Compose HotSwan 。

Compose HotSwan 作为 Android Studio/IntelliJ IDEA 插件,它的核心功能是让 Jetpack Compose 代码支持类似 Flutter 的 Hot Reload。
实际上 Compose Multiplatfrom 在 1.8.0 的时候就推出过 Hot Reload ,1.10 默认启动,但 JetBrains 只支持了桌面的 JVM 场景,因为 CMP 的 Hot Reload 严重依赖 JetBrains Runtime (JBR) 这个定制 JVM ,JBR 用 DCEVM(Dynamic Code Evolution VM)补丁来强制回退到解释执行模式从而支持 Hot Reload。
所以 CMP 的 Hot Reload 不支持 Android ,而 Compose HotSwan 的作用就是做了一个支持这个流程的插件,让用户在修改完 UI 代码或资源文件后,在 Android 平台也可以即时 Hot Reload。
根据官网描述,HotSwan 支持场景有:
- 增量编译: 当你保存文件时,它只编译被修改的 Kotlin 文件和资源(使用 Kotlin 增量编译 + D8)
- 类提取: 仅提取发生变化的
.class或.dex字节码
- 内存交换(Class Swap): 将新的字节码通过底层技术注入到正在运行的 Android 进程内存,替换旧的类定义
- 触发重组(Recompose): 自动触发 Compose 的重组机制,让新的 UI 代码在不丢失当前
remember状态的情况下重新渲染

也就是 HotSwan 会监听 IDE 的文件保存,当用户保存 .kt 或资源文件时,插件会通过匹配文件路径与项目模块结构来识别该文件属于哪个 Gradle 模块。
所以 HotSwan 只在包含更改文件的模块上运行增量构建,如果你编辑了 :feature:home 里的文件,那么只有这个模块会被编译:
- 独立编译 :每个函数体独立编译,更改一个函数不会影响其同类函数
- 状态保持 :编译器分析修改后的代码,确保只重组受影响的范围,所有现有状态在重载过程中保持不变,即使组合可组合体重新排序
- 参数刷新 :热重载后,运行时重新评估所有参数,确保所有参数都反映最新的代码
而对于资源文件(res/ 目录),HotSwan 采用不同的同步路径,它直接不编译 Kotlin,而是运行 processDebugResources 生成编译后的资源 APK 文件,然后应用到设备上进行实时补丁。

另外,HotSwan 会有一个运行在应用内的本地代理,当你的应用开启调试模式后,代理会被加载到 Android 运行时,而这个也就要求 Android API 等级为 28(Android 9.0 Pie)以上。
Gradle 插件会自动将调试变体的 minSdk 设置为 28,不营销 Release 。
同时,HotSwan 插件支持以下 Android Studio 和 IntelliJ IDEA 2024.3 及更高版本:
- Android Studio Meerkat (2024.3)
- Android Studio Narwhal (2025.1)
- Android Studio Otter (2025.2)
- Android Studio Panda (2025.3, Preview)
当然,最重要的是,HotSwan 插件是针对 Kotlin 2.3.0 编译器 API 设计,所以编译器插件必须基于特定的最低版本构建,也就是 Kotlin 2.3.0+。
另外,不可避免的,HotSwan 插件依赖 AGP 8.7.3 版本的具体 Gradle 任务名称和输出目录,所以你的 AGP 也必 ≥ 8.7.3+ 。

当然,由于 Android ART 对类重定义有严格限制(不允许在运行时更改类的结构、内存布局或方法签名),按 ART 的常规限制,运行时类重定义通常不允许修改类结构 ,但 HotSwan 通过额外的编译器与运行时处理,对部分结构性变化做了扩展支持,比如同文件新增函数、Data Class 新增属性等,不过这类能力并不是无限制的,而且在 API 30+ 上体验更完整,API 28/29 更容易回退到完整构建 ,其他如:
-
函数添加与删除:
- 支持: 在同一个文件内添加新的 Composable 或 Kotlin 函数并调用
- 不支持: 跨文件的函数添加/删除,以及修改
inline函数(内联函数在编译时被展开,没有独立单元可供替换)
-
Data Class(数据类)修改:
- 支持: 向 Data Class 添加新属性(HotSwan 通过二进制转换处理了这种变化)
- 不支持: 删除现有属性或修改属性类型,因为这会破坏内存布局
-
构造函数(Constructor):
- 支持: 为 Data Class 添加构造参数
- 不支持: 修改普通类(如 ViewModel、Repository)的构造函数
-
接口与父类:
- 不支持: 修改类实现的接口或继承的父类,这属于类层次结构变更,系统会直接拒绝
-
资源文件(Resources):
- 支持: 修改现有资源的值(如改字符串内容、颜色值)
- 不支持: 添加全新的资源(如新增一个 string 或 drawable)。因为新增资源会改变
R类的字段分配,导致 ID 移位
-
Lambda 表达式:
- 大部分支持: 增加或删除 Lambda 通常可以自动处理
- 不支持: 如果修改导致编译器生成的匿名类(Helper Class)发生剧烈偏移且无法对齐时,热重载会失败
所以,API 30+ 支持更广的 Hot Reload ,比如新增函数、新增 enum 值、新增 data class 属性等,而 API 28/29 对这些通常要 full rebuild 。
当然,另一个角度,其实最大的限制是,它是一个收费插件:
- 它提供 14 天的免费试用期
- 个人版: <math xmlns="http://www.w3.org/1998/Math/MathML"> 5 / 月或 5/月 或 </math>5/月或48/年
- 商业版: $15/月

虽然它比 "Live Edit" 更强大,但是收费这个场景,确实会让插件的推广存在比较大的难度,当然,插件还带了一些其他增项支持的场景,例如自动截图支持:
每次成功 Hot Reload 后自动抓取设备截图,并将它和触发重载的 git diff 配对,然后在 IDE 工具窗口中出现一条按时间顺序排列的缩略图条,可以实时查看的 UI 变更历史

底部还有细节面板,会包含各种元数据(时间戳、构建时长)和导致变更的 git 差异,可以准确看到导致每种视觉状态的代码变动:

另一个增项是 ,HotSwan MCP 服务器支持通过 MCP 将任何 AI 助手连接到正在运行的 Android 应用 ,所有的 AI 工具都可以编辑 Compose 代码、触发热重载、捕捉设备截图,也就是可以让 AI 更便捷调试 UI ,这一步在 2026 还是很贴心的。
整体来看,HotSwan 的设计哲学是「尽可能热重载,不行就自动重编」, 它通过魔改编译器插件绕过了 Android 系统的部分限制,但对于彻底改变类结构的操作,依然还是需要依赖传统的重启式增量更新,但是思路确实是别处心裁,整个插件实现也相对完善,特别还有针对 AI 的支持,整体来说确实不错。
那么,你觉得这个插件如何?你会为了这个插件买单吗?