目录

Hot Reload

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模式下执行与卡片相关的操作。

热重载、热重启、完全重启的区别

使用约束

表1 热重载/热重启的修改文件支持范围

修改文件

热重载

热重启

说明

修改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')。

表2 热重载/热重启的代码元素支持范围

代码元素

变更行为

热重载

热重启

说明

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方式引入的自定义组件的新增和修改。

表3 其他场景

场景

热重载

热重启

说明

命中断点时

不支持

不支持

点击Resume Program继续执行后再进行热重载/热重启。

修改跳转的其他ability页面

不支持

支持

修改代码并执行热重载后,重新拉起该ability页面可生效。

开启热重启/Apply Changes(可选)

如果需要使用热重启或Apply Changes的能力,先打开对应开关:点击菜单栏File > Settings(macOS为DevEco Studio > Preferences/Settings) > Build, Execution, Deployment > Hot Reload,勾选以下选项。

操作步骤

  1. 连接真机设备或模拟器。
  2. 在下拉菜单中,将运行/调试配置切换为Hot Reload的配置。

  3. 运行/调试应用,请参考使用本地真机运行应用或使用模拟器运行应用。
  4. 修改代码后,可以通过如下操作,查看设备上修改后的显示效果。

    • 方式一:点击Hot Reload按钮:

    • 方式二:通过快捷键方式触发Hot Reload:需要先在菜单栏点击File > Settings(macOS为DevEco Studio > Preferences/Settings),选择Tools > Actions on Save,勾选Perform hot reload,点击OK完成设置。修改代码后通过快捷键Ctrl + S即可触发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
    ...

  5. 点击停止按钮终止运行/调试运行,退出Hot Reload模式。

动态配置签名或应用版本号(可选)

在多人协作开发场景中,使用Hot Reload能力时,可以在hvigorfile.ts中动态配置签名或应用版本号,避免每个开发者都需要本地修改。该功能从DevEco Studio 6.0.2 Beta1版本开始支持。