开发中,调试效率直接影响开发体验。DevEco Studio提供Hot Reload(热重载)能力,支持在真机或模拟器上运行/调试应用时,修改代码并保存后无需重启应用,即可使用最新的代码,更快速地进行调试。

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

模式说明
热重载(Hot Reload)不重启应用,可保留应用状态,但整个过程会重新运行入口文件内的逻辑
热重启(Hot Restart)会重启应用,不保留应用状态,支持更广泛的ArkTS代码修改快速生效。一旦执行了热重启,后续热重载流程均会被热重启取代
完全重启完全重新运行应用,会重新全量编译代码和资源文件,较为耗时

说明:Hot Reload不支持卡片,不建议在hotReload模式下执行与卡片相关的操作。

二、使用限制

2.1 修改文件支持范围

修改文件热重载热重启说明
修改Entry入口模块内ets、ts代码文件✅✅-
修改Entry直接/间接依赖的Har模块内代码文件✅✅Har模块与Entry模块间无Hsp
修改Entry直接/间接依赖的Hsp模块内代码文件❌❌-
引入的其他工程Har模块内代码文件✅✅Har模块与Entry模块间无Hsp
引入的其他工程Hsp模块内代码文件❌❌-
修改worker线程文件❌❌-
修改模块目录下Index文件✅✅-
启动应用后新增的代码文件❌❌-
C++、so文件❌❌可通过Apply Changes支持(API 24+)
resource资源文件❌❌支持对资源引用的修改

2.2 主要代码元素支持范围

代码元素热重载热重启说明
UI代码(字号、颜色等)✅✅-
UI响应事件(onClick等)✅✅-
import(新增)部分部分不支持从启动应用时未加载的文件中import模块
import(修改/删除)✅✅-
动态import/lazy import新增6.1.0 Beta1开始部分支持6.1.0 Beta1开始部分支持不支持从启动应用时未加载的文件中import模块
export(新增)部分部分新增export default时应同步在调用文件内新增对应import语句
export(修改/删除)✅✅-
装饰器(@State、@Prop等)部分部分@Entry修饰的文件支持@Styles新增/修改/删除
Struct代码块(新增)部分✅@Entry修饰的文件内不支持新增Struct代码块
Struct代码块(修改)部分✅@Entry修饰的文件不支持成员变量/成员函数热重载
类(新增/修改/继承)部分✅@Entry修饰的文件内有限制
枚举(新增/修改)部分✅@Entry修饰的文件内不支持新增枚举
匿名函数/Lambda/闭包函数✅✅-
闭包变量(新增/删除)部分部分热重载仅支持顶层闭包变量

2.3 其他场景

场景支持情况
命中断点时不支持(需Resume Program继续执行后再操作)
修改跳转的其他ability页面热重载不支持,热重启支持

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

点击菜单栏File → Settings(macOS为DevEco Studio → Preferences/Settings)→ Build, Execution, Deployment → Hot Reload,勾选以下选项:

选项说明
Enable hot restart开启热重启
Enable Apply Changes开启Apply Changes(支持C++代码及资源文件增量调试,需设备API 24+)

四、操作步骤

4.1 连接设备

连接真机设备或模拟器。

4.2 切换配置

在下拉菜单中,将运行/调试配置切换为Hot Reload的配置。

4.3 运行/调试应用

使用本地真机运行应用或使用模拟器运行应用。

4.4 触发Hot Reload

修改代码后,通过以下方式查看设备上修改后的显示效果:

方式操作
方式一点击Hot Reload按钮
方式二设置Actions on Save勾选Perform hot reload,通过快捷键Ctrl + S触发

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

4.5 控制台日志

热重载成功:

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

4.6 退出Hot Reload

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

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

从DevEco Studio 6.0.2 Beta1开始,可以在hvigorfile.ts中动态配置签名或应用版本号,避免每个开发者都需要本地修改。

  • 签名配置:在hvigorfile.ts中配置签名信息,Hot Reload功能仍可正常使用

  • 版本号配置:在hvigorfile.ts中动态配置应用版本号,Hot Reload功能仍可正常使用

 

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐