DevEco Studio提供Hot Reload(热重载)能力,支持开发者在真机或模拟器上运行/调试应用时,修改代码并保存后无需重启应用,在真机或模拟器上即可使用最新的代码,帮助开发者更快速地进行调试。
针对大多数代码修改场景,热重载均能提供支持,但是一些特殊场景需要通过热重载+重启应用后方可生效,因此,从DevEco Studio 5.1.1 Beta1版本开始,提供基于热重载的增强能力——热重启。开启热重启开关后,DevEco Studio在遇到热重载不支持的场景时,将自动切换至热重启以获取更强的支持能力。
热重载和热重启均不支持C++文件和资源文件的修改,针对该问题,从DevEco Studio 6.1.1 Beta1版本开始,提供基于热重启的增强能力——Apply Changes。开启Apply Changes开关后,并且设备版本在API 24及以上,DevEco Studio在增量调试C++代码及资源文件时,会自动切换至Apply Changes。
Hot Reload不支持卡片,不建议在hotReload模式下执行与卡片相关的操作。
修改文件 | 热重载 | 热重启 | 说明 |
|---|---|---|---|
修改Entry入口模块内ets、ts代码文件 | 支持 | 支持 | - |
修改Entry直接或间接依赖的Har模块内代码文件 | 支持 | 支持 | Har模块与Entry模块间无Hsp。 |
修改Entry直接或间接依赖的Hsp模块内代码文件 | 不支持 | 不支持 | - |
引入的其他工程Har模块内代码文件 | 支持 | 支持 | Har模块与Entry模块间无Hsp。 |
引入的其他工程Hsp模块内代码文件 | 不支持 | 不支持 | - |
修改worker线程文件 | 不支持 | 不支持 | - |
修改模块目录下Index文件 | 支持 | 支持 | - |
启动应用后新增的代码文件 | 不支持 | 不支持 | - |
C++、so文件 | 不支持 | 不支持 | - |
resource资源文件(如修改string.json文件的内容) | 不支持 | 不支持 | 支持对资源引用的修改,例如把$r('app.color.greenColor')改成$r('app.color.redColor')。 |
代码元素 | 变更行为 | 热重载 | 热重启 | 说明 |
|---|---|---|---|---|
UI代码(如修改字号、颜色等) | 新增、修改、删除 | 支持 | 支持 | - |
UI响应事件(如添加onClick事件等) | 新增、修改、删除 | 支持 | 支持 | - |
import (从DevEco Studio 6.1.0 Beta1版本开始支持import *) | 新增 | 部分支持 | 部分支持 | 不支持从启动应用时未加载的文件中import模块。 |
修改、删除 | 支持 | 支持 | - | |
动态import lazy import napi_load_module napi_load_module_with_info | 新增 | 从DevEco Studio 6.1.0 Beta1版本开始,支持部分能力 | 从DevEco Studio 6.1.0 Beta1版本开始部分,支持部分能力 | 不支持从启动应用时未加载的文件中import模块。 |
修改、删除 | 从DevEco Studio 6.1.0 Beta1版本开始支持 | 从DevEco Studio 6.1.0 Beta1版本开始支持 | - | |
export | 新增 | 部分支持 | 部分支持 | 新增export default语句时应同步在调用文件内新增对应import语句,否则将失败。 |
修改、删除 | 支持 | 支持 | - | |
装饰器(@State、@Prop等) | 新增、修改、删除 | 部分支持 | 部分支持 | 热重载、热重启:@Entry修饰的文件支持@Styles新增、修改、删除。 热重启:@Entry修饰的文件支持@State新增、修改和删除。 |
declare声明变量 | 新增、修改、删除 | 支持 | 支持 | - |
Struct代码块 | 新增 | 部分支持 | 支持 | @Entry修饰的文件内不支持新增Struct代码块热重载,其他文件支持。 |
修改 | 部分支持 | 支持 | @Entry修饰的文件不支持成员变量、成员函数热重载,其他文件支持。 | |
删除 | 支持 | 支持 | - | |
类 | 新增 | 部分支持 | 支持 | @Entry修饰的文件内不支持新增包含成员函数的class,其他文件支持。 |
修改 | 部分支持 | 支持 | @Entry修饰的文件内class不支持新增成员函数,其他文件支持。 | |
继承 | 部分支持 | 支持 | @Entry修饰的文件内不支持类继承及被继承场景,其他文件支持。 | |
删除 | 支持 | 支持 | - | |
接口 | 新增、删除 | 支持 | 支持 | - |
修改 | 部分支持 | 支持 | @Entry修饰的文件内不支持接口对象修改,其他文件支持。 | |
枚举 | 新增、修改 | 部分支持 | 支持 | @Entry修饰的文件内不支持新增枚举,不支持修改枚举的键和值,其他文件支持。 |
删除 | 支持 | 支持 | - | |
匿名函数 | 新增、修改、删除 | 支持 | 支持 | - |
Lambda函数 | 新增、修改、删除 | 支持 | 支持 | - |
闭包函数 | 新增、修改、删除 | 支持 | 支持 | - |
闭包变量 | 新增、删除 | 部分支持 | 部分支持 | 热重载仅支持顶层闭包变量(不包括this变量)的新增或删除。 从DevEco Studio 6.0.0 Beta3版本开始,热重启不支持首次新增this变量或删除所有this变量。 |
修改 | 部分支持 | 支持 | 热重载不支持顶层闭包变量的修改。 | |
自定义组件 | 新增、修改、删除 | 部分支持 | 支持 | 热重载:@Entry修饰的文件内仅支持通过import方式引入的自定义组件的新增和修改。 |
场景 | 热重载 | 热重启 | 说明 |
|---|---|---|---|
命中断点时 | 不支持 | 不支持 | 点击Resume Program继续执行后再进行热重载/热重启。 |
修改跳转的其他ability页面 | 不支持 | 支持 | 修改代码并执行热重载后,重新拉起该ability页面可生效。 |
如果需要使用热重启或Apply Changes的能力,先打开对应开关:点击菜单栏File > Settings(macOS为DevEco Studio > Preferences/Settings) > Build, Execution, Deployment > Hot Reload,勾选以下选项。

。
按钮:
方式二不支持Apply Changes,如需使用Apply Changes功能,请使用方式一。

Performing hot reload... Syncing files to device xxx Reloaded 1 files in x s xxx ms.
Performing hot restart... $ hdc shell aa force-stop com.xx.xx Syncing files to device xxx Reloaded 1 files in x s xxx ms. $ hdc shell aa start -a EntryAbility -b com.xxx.xxx in xxx ms
成功执行Apply Changes后,控制台中会打印以下内容:
Performing Apply Changes... $ hdc shell aa force-stop com.xx.xx $ hdc file send xx xx in xx ms FileTransfer finish, Size:xxxx, File count = xx, time:xxx ms rate:xxxx.xxkB/s ...
在多人协作开发场景中,使用Hot Reload能力时,可以在hvigorfile.ts中动态配置签名或应用版本号,避免每个开发者都需要本地修改。该功能从DevEco Studio 6.0.2 Beta1版本开始支持。